




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
swing选取器本章介绍两个Swing选取器组件,它们是:JFileChooser和JColorChooser,它们分别用于选取文件和颜色。16.1 JFileChooser文件选取器(与选项窗格一样,参见14.3节“JOptionPane”)是放置在对话框中的轻量组件。一旦创建了一个JFileChooser实例,就可以把这个实例添加到一个对话框中。而且,JFileChooser类还提供了一些方法,这些方法把已存在的文件添加到一个模态对话框中。并且显示这个对话框。这些方法返回一个integer值,指出是激活了选取器的批准按钮还是清除了这个对话框。文件选取器支持三种显示模式:只显示文件、只显示目录和显示文件及目录。另外,文件选取器还支持单文件选取和多文件选取(Swing1.1FCS不完全支持多文件选取。)可以用许多不同的方法来定制文件选取器,如图16-1所示。图中的上图显示调用JFileChooser.showSaveDialog()后显示的标准对话框。图16-1 例子 16-1 一个简单的文件选取器例子import java.awt.*;import java.awt.event.*;import java.io.File;import javax.swing.*;import javax.swing.filechooser.*;import java.beans.*; public class Test extends JFrame JFileChooser chooser = new JFileChooser();JButton button = new JButton(show file chooser .);public Test() super(Simple File Chooser Application);Container contentPane = getContentPane();contentPane.setLayout(new FlowLayout();contentPane.add(button); button.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) int state = chooser.showOpenDialog(null);File file = chooser.getSelectedFile();if(file != null &state = JFileChooser.APPROVE_OPTION) JOptionPane.showMessageDialog(null, file.getPath();else if(state = JFileChooser.CANCEL_OPTION) JOptionPane.showMessageDialog(null, Canceled);else if(state = JFileChooser.ERROR_OPTION) JOptionPane.showMessageDialog(null, Error!););public static void main(String args) JFrame f = new Test();f.setBounds(300,300,350,100);f.setVisible(true);f.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);f.addWindowListener(new WindowAdapter() public void windowClosed(WindowEvent e) System.exit(0); );16.1.1 文件选取器类型例子 16-2 缺省的文件选取器类型import java.awt.*;import java.awt.event.*;import java.io.File;import javax.swing.*; public class Test extends JFrame JFileChooser chooser = new JFileChooser();JComboBox comboBox = new JComboBox();JButton button = new JButton(show file chooser .);public Test() super(Standard File Chooser Types);Container contentPane = getContentPane();contentPane.setLayout(new FlowLayout();contentPane.add(comboBox);contentPane.add(button); comboBox.addItem(OPEN_DIALOG);comboBox.addItem(SAVE_DIALOG);comboBox.addItem(custom dialog);button.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) String message = CANCELED;int state = showChooser(String)comboBox.getSelectedItem();File file = chooser.getSelectedFile();if(file != null & state = JFileChooser.APPROVE_OPTION) message = chooser.getApproveButtonText() + + file.getPath();JOptionPane.showMessageDialog(null, message););private int showChooser(String s) int state; if(s.equals(OPEN_DIALOG) state = chooser.showOpenDialog(null);else if(s.equals(SAVE_DIALOG) state = chooser.showSaveDialog(null);else / custom dialogString string = JOptionPane.showInputDialog(null, Button/Title String:);chooser.setApproveButtonMnemonic(string.charAt(1);state = chooser.showDialog(Test.this, string);return state;public static void main(String args) JFrame f = new Test();f.setBounds(300,300,350,100);f.setVisible(true);f.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);f.addWindowListener(new WindowAdapter() public void windowClosed(WindowEvent e) System.exit(0); );16.1.2 可访问组件例子 16-3 一个图像预览器可访问组件import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.beans.*;import java.io.*; public class Test extends JFrame JFileChooser chooser = new JFileChooser();ImagePreviewer previewer = new ImagePreviewer();public Test() super(Accessory Components);Container contentPane = getContentPane();JButton button = new JButton(Select A File);contentPane.setLayout(new FlowLayout();contentPane.add(button); setAccessoryComponent();button.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) chooser.showOpenDialog(null););private void setAccessoryComponent() JPanel previewPanel = new JPanel();previewPanel.setLayout(new BorderLayout();previewPanel.add(new JLabel(Image Previewer, SwingConstants.CENTER),BorderLayout.NORTH);previewPanel.add(previewer, BorderLayout.CENTER);previewer.setPreferredSize(new Dimension(200,0);previewer.setBorder(BorderFactory.createEtchedBorder();chooser.setAccessory(previewPanel);new ImagePreviewerAccessoryAdapter(chooser, previewer);public static void main(String a) JFrame f = new Test();f.setBounds(300, 300, 300, 75);f.setVisible(true);f.addWindowListener(new WindowAdapter() public void windowClosed(WindowEvent e) System.exit(0););class ImagePreviewerAccessoryAdapter extends Object public ImagePreviewerAccessoryAdapter(JFileChooser chooser,final ImagePreviewer previewer) chooser.addPropertyChangeListener(new PropertyChangeListener() public void propertyChange(PropertyChangeEvent e) if(e.getPropertyName().equals(JFileChooser.SELECTED_FILE_CHANGED_PROPERTY) previewer.update(File)e.getNewValue(););class ImagePreviewer extends JComponent private ImageIcon icon;public void update(File file) Dimension size = getSize();Insets insets = getInsets();icon = new ImageIcon(file.getPath();icon.setImage(icon.getImage().getScaledInstance(size.width - insets.left - insets.right, size.height - insets.top - insets.bottom, Image.SCALE_SMOOTH);if(isShowing() repaint();public void paintComponent(Graphics g) Insets insets = getInsets();super.paintComponent(g);if(icon != null)icon.paintIcon(this, g, insets.left, insets.top);16.1.3 过滤文件类型例子 16-4 一个文本文件过滤器和预览器import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.beans.*;import java.io.*;import java.util.*;import .*; public class Test extends JFrame JFileChooser chooser = new JFileChooser();TextPreviewer previewer = new TextPreviewer();JPanel previewPanel = new PreviewPanel();class PreviewPanel extends JPanel public PreviewPanel() JLabel label = new JLabel(Text Previewer,SwingConstants.CENTER);setPreferredSize(new Dimension(250,0);setBorder(BorderFactory.createEtchedBorder();setLayout(new BorderLayout();label.setBorder(BorderFactory.createEtchedBorder();add(label, BorderLayout.NORTH);add(previewer, BorderLayout.CENTER);public Test() super(Accessory Components);Container contentPane = getContentPane();JButton button = new JButton(Select A File);contentPane.setLayout(new FlowLayout();contentPane.add(button); chooser.setAccessory(previewPanel);chooser.addPropertyChangeListener(new PropertyChangeListener() public void propertyChange(PropertyChangeEvent e) if(e.getPropertyName().equals(JFileChooser.SELECTED_FILE_CHANGED_PROPERTY)previewer.update(File)e.getNewValue(););button.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) chooser.showOpenDialog(null););public static void main(String a) JFrame f = new Test();f.setBounds(300, 300, 300, 75);f.setVisible(true);f.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);f.addWindowListener(new WindowAdapter() public void windowClosed(WindowEvent e) System.exit(0););class TextPreviewer extends JComponent private ImageIcon icon;private JTextArea textArea = new JTextArea();public TextPreviewer() setBorder(BorderFactory.createEtchedBorder();setLayout(new BorderLayout();add(new JScrollPane(textArea), BorderLayout.CENTER);public void update(File file) textArea.setText(contentsOfFile(file);if(isShowing() textArea.revalidate();static String contentsOfFile(File file) String s = new String();char buff = new char50000;InputStream is;InputStreamReader reader;URL url;try reader = new FileReader(file);int nch;while (nch = reader.read(buff, 0, buff.length) != -1) s = s + new String(buff, 0, nch); catch (java.io.IOException ex) s = Could not load file;return s;例子 16-5 多种文件过滤器import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.beans.*;import java.io.*;import .URL; public class Test extends JFrame JFileChooser chooser = new JFileChooser();TextPreviewer previewer = new TextPreviewer();PreviewPanel previewPanel = new PreviewPanel();class PreviewPanel extends JPanel public PreviewPanel() JLabel label = new JLabel(Text Previewer,SwingConstants.CENTER);setPreferredSize(new Dimension(350,0);setBorder(BorderFactory.createEtchedBorder();setLayout(new BorderLayout();label.setBorder(BorderFactory.createEtchedBorder();add(label, BorderLayout.NORTH);add(previewer, BorderLayout.CENTER);public Test() super(Filtering Files);Container contentPane = getContentPane();JButton button = new JButton(Select A File);contentPane.setLayout(new FlowLayout();contentPane.add(button); button.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) int state = chooser.showOpenDialog(null);String s = CANCELED;if(state = JFileChooser.APPROVE_OPTION) s = File Selected: + chooser.getSelectedFile().getPath();JOptionPane.showMessageDialog(null, s););chooser.setAccessory(previewPanel);chooser.addChoosableFileFilter(new TextFilter();chooser.addChoosableFileFilter(new JavaCodeFilter();chooser.addPropertyChangeListener(new PropertyChangeListener() public void propertyChange(PropertyChangeEvent e) if(e.getPropertyName().equals(JFileChooser.SELECTED_FILE_CHANGED_PROPERTY) previewer.configure(File)e.getNewValue(););public static void main(String a) JFrame f = new Test();f.setBounds(300, 300, 300, 75);f.setVisible(true);f.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);f.addWindowListener(new WindowAdapter() public void windowClosed(WindowEvent e) System.exit(0););abstract class SuffixAwareFilter extends javax.swing.filechooser.FileFilter public String getSuffix(File f) String s = f.getPath(), suffix = null;int i = s.lastIndexOf(.);if(i 0 & i 0 & i 0) filenames = new StringnumFiles;for(int i=0; i numFiles; +i) filenamesi = filesi.getPath();System.out.println(filenamesi);return filenames;public static void main(String args) JFrame f = new Test();f.setBounds(300,300,350,100);f.setVisible(true);f.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);f.addWindowListener(new WindowAdapter() public void windowClosed(WindowEvent e) System.exit(0); );16.1.6 JFileChooser属性16.1.7 JFileChooser事件例子 16-8 JFileChooser动作事件import java.awt.*;import java.awt.event.*;import java.io.File;import javax.swing.*; public class Test extends JFrame JFileChooser chooser = new JFileChooser();JDialog dialog;JButton button = new JButton(show file chooser .);public Test() super(Simple File Chooser Application);Container contentPane = getContentPane();contentPane.setLayout(new FlowLayout();contentPane.add(button); button.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) String title = chooser.getDialogTitle();if(title = null)chooser.getUI().getDialogTitle(chooser);dialog = new JDialog(Frame)null, title, false);Container dialogContentPane = dialog.getContentPane();dialogContentPane.setLayout(new BorderLayout();dialogContentPane.add(chooser, BorderLayout.CENTER);dialog.setTitle(Non-Modal File Chooser);dialog.pack();dialog.setLocationRelativeTo(Test.this);dialog.setVisible(true); );chooser.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) String state = (String)e.getActionCommand();if(state.equals(JFileChooser.APPROVE_SELECTION) File file = chooser.getSelectedFile();JOptionPane.showMessageDialog(null, file.getPath();else if(state.equals(JFileChooser.CANCEL_SELECTION) JOptionPane.showMessageDialog(null, Canceled);/ JFileChooser action listeners are notified/ when one either the approve button or/ cancel button is activateddialog.setVisible(false););public static void main(String args) JFrame f = new Test();f.setBounds(300,300,350,100);f.setVisible(true);f.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);f.addWindowListener(new WindowAdapter() public void windowClosed(WindowEvent e) System.exit(0); );16.1.8 JFileChooser类总结16.1.9 AWT兼容16.2 JColor
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 不正当竞争行为的法律后果
- 算法交易对股市的影响研究
- 2025年编程原理试题及答案
- 奇葩语文拼音题目及答案
- 七年级数学下试卷及答案
- 2025年善意的谎言辩论反方资料
- CN222980409U 一种抗跌落型继电器 (四川宏发电声有限公司)
- CN120248362A 一种多孔配位聚合物及其制备方法与其在c3h6-c3h8混合气分离中的应用 (同济大学)
- 2025年职测题库及答案
- UPS服务安全培训课件
- 630KVA箱变安装工程施工设计方案
- DBJ51T 195-2022 四川省纵向增强体心墙土石坝技术规程
- 农家乐大学生创业计划书
- 《马克思生平故事》课件
- 主动脉夹层临床医学专业教学系列课件讲解
- 天津市河北区2024-2025学年九年级上学期12月月考数学试题(含答案)
- 内墙刮大白分包合同模板2025年
- 甘肃省行政执法人员综合法律知识考试试题库
- 个人资本注入公司合作合同
- GB/T 44739-2024枸杞及其制品中枸杞多糖的测定离子色谱法
- 2015锅炉压力管道安装质量手册程序文件及安装工艺汇编
评论
0/150
提交评论