?? s16.htm
字號(hào):
<SCRIPT LANGUAGE="JavaScript" SRC="/-fs0/sys/pop-up.js"></SCRIPT><SCRIPT LANGUAGE="JavaScript" SRC="/-fs0/sys/pop-up-all.js"></SCRIPT><html><head><title>易都網(wǎng)--Java 2 圖形設(shè)計(jì)卷Ⅱ: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,網(wǎng)絡(luò)安全,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">上一頁(yè)</a>][<a href="s17.htm">下一頁(yè)</a>]</p> <p align="center"> <b>第16章 選取器</b></p> <p> 本章介紹兩個(gè)Swing選取器組件,它們是:JFileChooser和JColorChooser,它們分別用于選取文件和顏色。</p> <p> <b>16.1 JFileChooser</b></p> <p> 文件選取器(與選項(xiàng)窗格一樣,參見14.3節(jié)“JOptionPane”)是放置在對(duì)話框中的輕量組件。一旦創(chuàng)建了一個(gè)JFileChooser實(shí)例,就可以把這個(gè)實(shí)例添加到一個(gè)對(duì)話框中。而且,JFileChooser類還提供了一些方法,這些方法把已存在的文件添加到一個(gè)模態(tài)對(duì)話框中。并且顯示這個(gè)對(duì)話框。這些方法返回一個(gè)integer值,指出是激活了選取器的批準(zhǔn)按鈕還是清除了這個(gè)對(duì)話框。<br> 文件選取器支持三種顯示模式:只顯示文件、只顯示目錄和顯示文件及目錄。另外,文件選取器還支持單文件選取和多文件選取(Swing1.1FCS不完全支持多文件選取。)<br> 可以用許多不同的方法來定制文件選取器,如圖16-1所示。圖16-1中的上圖顯示調(diào)用JFileChooser.showSaveDialog()后顯示的標(biāo)準(zhǔn)對(duì)話框。圖16-1 </p> <p align="center"><b>例子 16-1 一個(gè)簡(jiǎn)單的文件選取器例子</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 一個(gè)圖像預(yù)覽器可訪問組件</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 一個(gè)文本文件過濾器和預(yù)覽器</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>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -