📄 s16.htm
字号:
}<br> } <br> catch (java.io.IOException ex) {<br> s = "Could not load file";<br> }<br> return s;<br> }<br> }</p> <hr noshade size="1"> <p align="center"><b>例子 16-5 多种文件过滤器</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.net.URL; <p>public class Test extends JFrame {<br> JFileChooser chooser = new JFileChooser();<br> TextPreviewer previewer = new TextPreviewer();<br> PreviewPanel 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(350,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("Filtering Files");<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> button.addActionListener(new ActionListener() {<br> public void actionPerformed(ActionEvent e) {<br> int state = chooser.showOpenDialog(null);<br> String s = "CANCELED";</p> <p> if(state == JFileChooser.APPROVE_OPTION) {<br> s = "File Selected: " + <br> chooser.getSelectedFile().getPath();<br> }<br> JOptionPane.showMessageDialog(null, s);<br> }<br> });</p> <p> chooser.setAccessory(previewPanel);<br> chooser.addChoosableFileFilter(new TextFilter());<br> chooser.addChoosableFileFilter(new JavaCodeFilter());</p> <p> chooser.addPropertyChangeListener(<br> new PropertyChangeListener() {<br> public void propertyChange(PropertyChangeEvent e) {<br> if(e.getPropertyName().equals(<br> JFileChooser.SELECTED_FILE_CHANGED_PROPERTY)) {<br> previewer.configure((File)e.getNewValue());<br> }<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> abstract class SuffixAwareFilter <br> extends javax.swing.filechooser.FileFilter {<br> public String getSuffix(File f) {<br> String s = f.getPath(), suffix = null;<br> int i = s.lastIndexOf('.');</p> <p> if(i > 0 && i < s.length() - 1)<br> suffix = s.substring(i+1).toLowerCase();</p> <p> return suffix;<br> }<br> public boolean accept(File f) {<br> return f.isDirectory();<br> }<br> }<br> class ImageFilter extends SuffixAwareFilter {<br> public boolean accept(File f) {<br> boolean accept = super.accept(f);</p> <p> if( ! accept) {<br> String suffix = getSuffix(f);</p> <p> if(suffix != null)<br> accept = super.accept(f) || suffix.equals("jpg")<br> || suffix.equals("gif");<br> }<br> return accept;<br> }<br> public String getDescription() {<br> return "Java Source Code Files(*.java)";<br> }<br> }<br> class JavaCodeFilter extends SuffixAwareFilter {<br> public boolean accept(File f) {<br> boolean accept = super.accept(f);</p> <p> if( ! accept) {<br> String suffix = getSuffix(f);</p> <p> if(suffix != null)<br> accept = super.accept(f) || suffix.equals("java");<br> }<br> return accept;<br> }<br> public String getDescription() {<br> return "Java Source Code Files(*.java)";<br> }<br> }<br> class TextFilter extends SuffixAwareFilter {<br> public boolean accept(File f) {<br> String suffix = getSuffix(f);</p> <p> if(suffix != null)<br> return super.accept(f) || suffix.equals("txt");</p> <p> return false;<br> }<br> public String getDescription() {<br> return "Text Files(*.txt)";<br> }<br> }<br> class TextPreviewer extends JComponent {<br> private JTextArea textArea = new JTextArea();<br> private JScrollPane scrollPane = new JScrollPane(textArea);</p> <p> public TextPreviewer() {<br> textArea.setEditable(false);</p> <p> setBorder(BorderFactory.createEtchedBorder());<br> setLayout(new BorderLayout());<br> add(scrollPane, BorderLayout.CENTER);<br> }<br> public void configure(File file) {<br> textArea.setText(contentsOfFile(file));</p> <p> SwingUtilities.invokeLater(new Runnable() {<br> public void run() {<br> JViewport vp = scrollPane.getViewport();</p> <p> vp.setViewPosition(new Point(0,0));<br> }<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> }<br> } <br> catch (java.io.IOException ex) {<br> s = "Could not load file";<br> }<br> return s;<br> }<br> }</p> <hr noshade size="1"> <p> </p> <p> 16.1.4 文件视图</p> <p> </p> <p align="center"><b>例子 16-6 一个定制的文件视图</b></p> <hr size="1"> import javax.swing.*;<br> import javax.swing.filechooser.FileView;<br> import java.awt.*;<br> import java.awt.event.*;<br> import java.io.*; <p>public class Test extends JFrame {<br> JFileChooser chooser = new JFileChooser();<br> JButton button = new JButton("show file chooser ...");</p> <p> public Test() {<br> super("Custom File View Example");<br> Container contentPane = getContentPane();</p> <p> contentPane.setLayout(new FlowLayout());<br> contentPane.add(button); </p> <p> chooser.setFileView(new CustomFileView());</p> <p> button.addActionListener(new ActionListener() {<br> public void actionPerformed(ActionEvent e) {<br> int state = chooser.showSaveDialog(null);<br> File file = chooser.getSelectedFile();<br> String s = "CANCELED";</p> <p> if(state == JFileChooser.APPROVE_OPTION) <br> s = "File: " + file.getPath();</p> <p> JOptionPane.showMessageDialog(null, s);<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);</p> <p> f.addWindowListener(new WindowAdapter() {<br> public void windowClosed(WindowEvent e) {<br> System.exit(0); <br> }<br> });<br> }<br> }<br> class CustomFileView extends FileView {<br> private Icon fileIcon = new ImageIcon("file.gif"), <br> directoryIcon = new ImageIcon("folder.gif"),<br> imageIcon = new ImageIcon("photo.jpg");</p> <p> public String getName(File f) { return null; }<br> public String getDescription(File f) { return null; }<br> public String getTypeDescription(File f) { return null; }</p> <p> public Icon getIcon(File f) {<br> Icon icon = null;</p> <p> if(isImage(f)) icon = imageIcon;<br> else if(f.isDirectory()) icon = directoryIcon;<br> else icon = fileIcon;</p> <p> return icon;<br> }<br> public Boolean isTraversable(File f) {<br> Boolean b = null;</p> <p> if(f.getPath().equals("D:\\file.txt")) {<br> b = new Boolean(false);<br> }<br> else if(f.getPath().equals("D:\\books")) {<br> b = new Boolean(false);<br> }<br> return b == null ? new Boolean(true) : b;<br> }<br> private boolean isImage(File f) {<br> String suffix = getSuffix(f);<br> boolean isImage = false;</p> <p> if(suffix != null) {<br> isImage = suffix.equals("gif") || <br> suffix.equals("bmp") ||<br> suffix.equals("jpg");<br> }<br> return isImage;<br> }<br> private String getSuffix(File file) {<br> String filestr = file.getPath(), suffix = null;<br> int i = filestr.lastIndexOf('.');</p> <p> if(i > 0 && i < filestr.length()) {<br> suffix = filestr.substring(i+1).toLowerCase(); <br> }<br> return suffix;<br> }<br> }</p> <hr noshade size="1"> <p> 16.1.5 多文件选取</p> <p> </p> <p align="center"><b>例子 16-7 文件选取器的多文件选取</b></p> <hr size="1"> import java.awt.*;<br> import java.awt.event.*;<br> import java.io.File;<br> import javax.swing.*;<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> public Test() {<br> super("Simple File Chooser Application");<br> Container contentPane = getContentPane();</p> <p> contentPane.setLayout(new FlowLayout());<br> contentPane.add(button); </p> <p> chooser.setMultiSelectionEnabled(true);</p> <p> button.addActionListener(new ActionListener() {<br> public void actionPerformed(ActionEvent e) {<br> int state = chooser.showOpenDialog(null);<br> File[] files = chooser.getSelectedFiles();<br> String[] filenames = getFilenames(files);</p> <p> if(filenames != null &&<br> state == JFileChooser.APPROVE_OPTION) {<br> JOptionPane.showMessageDialog(null,filenames);<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> private String[] getFilenames(File[] files) {<br> String[] filenames = null;<br> int numFiles = files.length;</p> <p>System.out.println(numFiles);</p> <p> if(files.length > 0) {<br> filenames = new String[numFiles];</p> <p> for(int i=0; i < numFiles; ++i) {<br> filenames[i] = files[i].getPath();<br> System.out.println(filenames[i]);<br> }<br> }<br> return filenames;<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> 16.1.6 JFileChooser属性</p> <p> </p> <p> 16.1.7 JFileChooser事件</p> <p> </p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -