📄 s16.htm
字号:
<SCRIPT LANGUAGE="JavaScript" SRC="/-fs0/sys/pop-up.js"></SCRIPT><SCRIPT LANGUAGE="JavaScript" SRC="/-fs0/sys/pop-up-all.js"></SCRIPT><html><head><title>易都网--Java 2 图形设计卷Ⅱ:SWING</title><LINK rel="stylesheet" href="../../../_public/javaa.css"><meta http-equiv="Content-Type" content="text/html; charset=GBK"><script language="JavaScript" src="../../../_public/javaa.js"></script><meta name="keywords" content="Java,JSP,ASP,PHP,J2EE,EJB,JavaScript,C/C++,ASM,CSS,HTML,XML,网络安全,MySQL,ACCESS"></head><body bgcolor="#FFFFFF"><table border=0 cellpadding=0 cellspacing=0 width="100%"> <tbody> <script language="javascript">print2()</script> <tr> <td width="100%"> <table bgcolor=#EEEEEE border=0 cellpadding=3 cellspacing=0 width="100%"> <tbody> <tr> <td class=f1 id=thetd width="100%"> <p>[<a href="index.html" target="_self">目录</a>][<a href="s15.htm">上一页</a>][<a href="s17.htm">下一页</a>]</p> <p align="center"> <b>第16章 选取器</b></p> <p> 本章介绍两个Swing选取器组件,它们是:JFileChooser和JColorChooser,它们分别用于选取文件和颜色。</p> <p> <b>16.1 JFileChooser</b></p> <p> 文件选取器(与选项窗格一样,参见14.3节“JOptionPane”)是放置在对话框中的轻量组件。一旦创建了一个JFileChooser实例,就可以把这个实例添加到一个对话框中。而且,JFileChooser类还提供了一些方法,这些方法把已存在的文件添加到一个模态对话框中。并且显示这个对话框。这些方法返回一个integer值,指出是激活了选取器的批准按钮还是清除了这个对话框。<br> 文件选取器支持三种显示模式:只显示文件、只显示目录和显示文件及目录。另外,文件选取器还支持单文件选取和多文件选取(Swing1.1FCS不完全支持多文件选取。)<br> 可以用许多不同的方法来定制文件选取器,如图16-1所示。图16-1中的上图显示调用JFileChooser.showSaveDialog()后显示的标准对话框。图16-1 </p> <p align="center"><b>例子 16-1 一个简单的文件选取器例子</b></p> <hr size="1"> import java.awt.*;<br> import java.awt.event.*;<br> import java.io.File;<br> import javax.swing.*;<br> import javax.swing.filechooser.*;<br> import java.beans.*; <p>public class Test extends JFrame {<br> JFileChooser chooser = new JFileChooser();<br> JButton button = new JButton("show file chooser ...");</p> <p><br> public Test() {<br> super("Simple File Chooser Application");<br> Container contentPane = getContentPane();</p> <p> contentPane.setLayout(new FlowLayout());<br> contentPane.add(button); </p> <p> button.addActionListener(new ActionListener() {<br> public void actionPerformed(ActionEvent e) {<br> int state = chooser.showOpenDialog(null);<br> File file = chooser.getSelectedFile();</p> <p> if(file != null &&<br> state == JFileChooser.APPROVE_OPTION) {<br> JOptionPane.showMessageDialog(<br> null, file.getPath());<br> }<br> else if(state == JFileChooser.CANCEL_OPTION) {<br> JOptionPane.showMessageDialog(<br> null, "Canceled");<br> }<br> else if(state == JFileChooser.ERROR_OPTION) {<br> JOptionPane.showMessageDialog(<br> null, "Error!");<br> }<br> }<br> });<br> }<br> public static void main(String args[]) {<br> JFrame f = new Test();<br> f.setBounds(300,300,350,100);<br> f.setVisible(true);</p> <p> f.setDefaultCloseOperation(<br> WindowConstants.DISPOSE_ON_CLOSE);<br> <br> f.addWindowListener(new WindowAdapter() {<br> public void windowClosed(WindowEvent e) {<br> System.exit(0); <br> }<br> });<br> }<br> }</p> <hr noshade size="1"> <p> </p> <p> <b>16.1.1 文件选取器类型</b></p> <p align="center"><b>例子 16-2 缺省的文件选取器类型</b></p> <hr size="1"> import java.awt.*;<br> import java.awt.event.*;<br> import java.io.File;<br> import javax.swing.*; <p>public class Test extends JFrame {<br> JFileChooser chooser = new JFileChooser();<br> JComboBox comboBox = new JComboBox();<br> JButton button = new JButton("show file chooser ...");</p> <p> public Test() {<br> super("Standard File Chooser Types");<br> Container contentPane = getContentPane();</p> <p> contentPane.setLayout(new FlowLayout());<br> contentPane.add(comboBox);<br> contentPane.add(button); </p> <p> comboBox.addItem("OPEN_DIALOG");<br> comboBox.addItem("SAVE_DIALOG");<br> comboBox.addItem("custom dialog");</p> <p> button.addActionListener(new ActionListener() {<br> public void actionPerformed(ActionEvent e) {<br> String message = "CANCELED";<br> int state = showChooser(<br> (String)comboBox.getSelectedItem());<br> File file = chooser.getSelectedFile();</p> <p> if(file != null && <br> state == JFileChooser.APPROVE_OPTION) {<br> message = chooser.getApproveButtonText() + <br> " " + file.getPath();<br> }<br> JOptionPane.showMessageDialog(null, message);<br> }<br> });<br> }<br> private int showChooser(String s) {<br> int state; </p> <p> if(s.equals("OPEN_DIALOG")) {<br> state = chooser.showOpenDialog(null);<br> }<br> else if(s.equals("SAVE_DIALOG")) {<br> state = chooser.showSaveDialog(null);<br> }<br> else { // custom dialog<br> String string = JOptionPane.showInputDialog(<br> null, <br> "Button/Title String:");</p> <p> chooser.setApproveButtonMnemonic(string.charAt(1));<br> state = chooser.showDialog(Test.this, string);<br> }<br> return state;<br> }<br> public static void main(String args[]) {<br> JFrame f = new Test();<br> f.setBounds(300,300,350,100);<br> f.setVisible(true);</p> <p> f.setDefaultCloseOperation(<br> WindowConstants.DISPOSE_ON_CLOSE);<br> <br> f.addWindowListener(new WindowAdapter() {<br> public void windowClosed(WindowEvent e) {<br> System.exit(0); <br> }<br> });<br> }<br> }</p> <hr noshade size="1"> <p> </p><p> 16.1.2 可访问组件</p> <p> </p> <p align="center"><b>例子 16-3 一个图像预览器可访问组件</b></p> <hr size="1"> import javax.swing.*;<br> import java.awt.*;<br> import java.awt.event.*;<br> import java.beans.*;<br> import java.io.*; <p>public class Test extends JFrame {<br> JFileChooser chooser = new JFileChooser();<br> ImagePreviewer previewer = new ImagePreviewer();</p> <p><br> public Test() {<br> super("Accessory Components");<br> <br> Container contentPane = getContentPane();<br> JButton button = new JButton("Select A File");</p> <p> contentPane.setLayout(new FlowLayout());<br> contentPane.add(button); </p> <p> setAccessoryComponent();</p> <p> button.addActionListener(new ActionListener() {<br> public void actionPerformed(ActionEvent e) {<br> chooser.showOpenDialog(null);<br> }<br> });<br> }<br> private void setAccessoryComponent() {<br> JPanel previewPanel = new JPanel();</p> <p> previewPanel.setLayout(new BorderLayout());<br> previewPanel.add(new JLabel("Image Previewer", <br> SwingConstants.CENTER),<br> BorderLayout.NORTH);</p> <p> previewPanel.add(previewer, BorderLayout.CENTER);</p> <p> previewer.setPreferredSize(new Dimension(200,0));<br> previewer.setBorder(BorderFactory.createEtchedBorder());</p> <p> chooser.setAccessory(previewPanel);</p> <p> new ImagePreviewerAccessoryAdapter(chooser, previewer);<br> }<br> public static void main(String a[]) {<br> JFrame f = new Test();<br> f.setBounds(300, 300, 300, 75);<br> f.setVisible(true);</p> <p> f.addWindowListener(new WindowAdapter() {<br> public void windowClosed(WindowEvent e) {<br> System.exit(0);<br> }<br> });<br> }<br> }<br> class ImagePreviewerAccessoryAdapter extends Object {<br> public ImagePreviewerAccessoryAdapter(<br> JFileChooser chooser,<br> final ImagePreviewer previewer) {<br> chooser.addPropertyChangeListener(<br> new PropertyChangeListener() {<br> public void propertyChange(PropertyChangeEvent e) {<br> if(e.getPropertyName().equals(<br> JFileChooser.SELECTED_FILE_CHANGED_PROPERTY)) {<br> previewer.update((File)e.getNewValue());<br> }<br> }<br> });<br> }<br> }<br> class ImagePreviewer extends JComponent {<br> private ImageIcon icon;</p> <p> public void update(File file) {<br> Dimension size = getSize();<br> Insets insets = getInsets();</p> <p> icon = new ImageIcon(file.getPath());<br> <br> icon.setImage(icon.getImage().getScaledInstance(<br> size.width - insets.left - insets.right, <br> size.height - insets.top - insets.bottom, <br> Image.SCALE_SMOOTH));</p> <p> if(isShowing()) {<br> repaint();<br> }<br> }<br> public void paintComponent(Graphics g) {<br> Insets insets = getInsets();</p> <p> super.paintComponent(g);</p> <p> if(icon != null)<br> icon.paintIcon(this, g, insets.left, insets.top);<br> }<br> }</p> <hr noshade size="1"> <p> 16.1.3 过滤文件类型</p> <p> </p> <p align="center"><b>例子 16-4 一个文本文件过滤器和预览器</b></p> <hr size="1"> import javax.swing.*;<br> import java.awt.*;<br> import java.awt.event.*;<br> import java.beans.*;<br> import java.io.*;<br> import java.util.*;<br> import java.net.*; <p>public class Test extends JFrame {<br> JFileChooser chooser = new JFileChooser();<br> TextPreviewer previewer = new TextPreviewer();<br> JPanel previewPanel = new PreviewPanel();</p> <p> class PreviewPanel extends JPanel {<br> public PreviewPanel() {<br> JLabel label = new JLabel("Text Previewer",<br> SwingConstants.CENTER);<br> setPreferredSize(new Dimension(250,0));<br> setBorder(BorderFactory.createEtchedBorder());</p> <p> setLayout(new BorderLayout());</p> <p> label.setBorder(BorderFactory.createEtchedBorder());<br> add(label, BorderLayout.NORTH);<br> add(previewer, BorderLayout.CENTER);<br> }<br> }<br> public Test() {<br> super("Accessory Components");<br> <br> Container contentPane = getContentPane();<br> JButton button = new JButton("Select A File");</p> <p> contentPane.setLayout(new FlowLayout());<br> contentPane.add(button); </p> <p> chooser.setAccessory(previewPanel);<br> chooser.addPropertyChangeListener(<br> new PropertyChangeListener() {<br> public void propertyChange(PropertyChangeEvent e) {<br> if(e.getPropertyName().equals(<br> JFileChooser.SELECTED_FILE_CHANGED_PROPERTY))<br> previewer.update((File)e.getNewValue());<br> }<br> });<br> button.addActionListener(new ActionListener() {<br> public void actionPerformed(ActionEvent e) {<br> chooser.showOpenDialog(null);<br> }<br> });<br> }<br> public static void main(String a[]) {<br> JFrame f = new Test();<br> f.setBounds(300, 300, 300, 75);<br> f.setVisible(true);</p> <p> f.setDefaultCloseOperation(<br> WindowConstants.DISPOSE_ON_CLOSE);</p> <p> f.addWindowListener(new WindowAdapter() {<br> public void windowClosed(WindowEvent e) {<br> System.exit(0);<br> }<br> });<br> }<br> }<br> class TextPreviewer extends JComponent {<br> private ImageIcon icon;<br> private JTextArea textArea = new JTextArea();</p> <p> public TextPreviewer() {<br> setBorder(BorderFactory.createEtchedBorder());<br> setLayout(new BorderLayout());<br> add(new JScrollPane(textArea), BorderLayout.CENTER);<br> }<br> public void update(File file) {<br> textArea.setText(contentsOfFile(file));</p> <p> if(isShowing()) {<br> textArea.revalidate();<br> }<br> }<br> static String contentsOfFile(File file) {<br> String s = new String();<br> char[] buff = new char[50000];<br> InputStream is;<br> InputStreamReader reader;<br> URL url;</p> <p> try {<br> reader = new FileReader(file);</p> <p> int nch;</p> <p> while ((<br> nch = reader.read(buff, 0, buff.length)) != -1) {<br> s = s + new String(buff, 0, nch);<br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -