/* * $Id: DirChooserDemo.java,v 1.21 2005/10/31 13:42:00 zfq Exp $ * * Copyright (C) 2001-2003 Extreme Component, Inc. All rights reserved. * Use is subject to license terms. */ import java.awt.*; import java.awt.event.*; import java.beans.*; import java.io.File; import java.util.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.filechooser.*; import com.zfqjava.swing.JDirChooser; import com.zfqjava.swing.JBean; import com.zfqjava.swing.JCommonPane; /** * JDirChooser Demo * * @author $Author: zfq $ * @version $Revision: 1.21 $ $Date: 2005/10/31 13:42:00 $ */ public class DirChooserDemo extends JPanel { private JDirChooser dirChooser; private JLabel label1; private JLabel label2; public DirChooserDemo() { setLayout(new BorderLayout()); //setLayout(new BoxLayout(this, BoxLayout.X_AXIS)); dirChooser = new JDirChooser(); dirChooser.addPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent e) { String property = e.getPropertyName(); if(property == JDirChooser.SELECTED_FILE_CHANGED_PROPERTY || property == JDirChooser.SELECTED_FILES_CHANGED_PROPERTY) { File file = dirChooser.getSelectedFile(); File[] files = dirChooser.getSelectedFiles(); String text1 = (file == null ? "" : file.getPath()); label1.setText("selected file:"+text1); label2.setText("selected files:"+formatMessage(files)); } } }); add(dirChooser, BorderLayout.CENTER); //add(dirChooser); JPanel eastPanel = new JPanel(); eastPanel.setLayout(new BoxLayout(eastPanel, BoxLayout.Y_AXIS)); JPanel panel = new JPanel(); panel.setBorder(BorderFactory.createTitledBorder("Change Property")); panel.add(createPropertyPanel()); eastPanel.add(panel); panel = new JPanel(); panel.setBorder(BorderFactory.createTitledBorder("Show Dialog")); panel.add(createDialogPanel()); eastPanel.add(panel); panel = new JPanel(); panel.setBorder(BorderFactory.createTitledBorder("Show Selected File")); panel.add(createSelectedFilePanel()); eastPanel.add(panel); add(eastPanel, BorderLayout.EAST); //add(eastPanel); } private JPanel createSelectedFilePanel() { JPanel thePanel = new JPanel(); thePanel.setPreferredSize(new Dimension(50, 50)); thePanel.setLayout(new BoxLayout(thePanel, BoxLayout.Y_AXIS)); label1 = new JLabel(); label2 = new JLabel(); thePanel.add(label1); thePanel.add(label2); return thePanel; } private JPanel createPropertyPanel() { JPanel thePanel = new JPanel(); thePanel.setLayout(new BoxLayout(thePanel, BoxLayout.Y_AXIS)); JPanel panel = new JPanel(); JLabel label = new JLabel("Root file:"); final JTextField tf = new JTextField(); tf.setColumns(12); tf.setText(dirChooser.getRootFile().getPath()); tf.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String name = tf.getText(); if(name != null) { File file = new File(name.trim()); dirChooser.setRootFile(file); } } }); tf.addFocusListener(new FocusAdapter() { public void focusGained(FocusEvent e) { tf.selectAll(); } }); label.setLabelFor(tf); panel.add(label); panel.add(tf); thePanel.add(panel); thePanel.add(Box.createVerticalStrut(5)); JCheckBox cb = new JCheckBox("Show hidding file"); cb.setSelected(!dirChooser.isFileHidingEnabled()); cb.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { int state = e.getStateChange(); if(state == ItemEvent.SELECTED) { dirChooser.setFileHidingEnabled(false); } else { dirChooser.setFileHidingEnabled(true); } } }); thePanel.add(cb); thePanel.add(Box.createVerticalStrut(5)); JCheckBox cb1 = new JCheckBox("Show file and directory"); cb1.setSelected(false); cb1.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { int state = e.getStateChange(); if(state == ItemEvent.SELECTED) { dirChooser.setFileSelectionMode(JDirChooser.FILES_AND_DIRECTORIES); } else { dirChooser.setFileSelectionMode(JDirChooser.DIRECTORIES_ONLY); } } }); thePanel.add(cb1); thePanel.add(Box.createVerticalStrut(5)); JCheckBox cb2 = new JCheckBox("Allow multiple selection"); cb2.setSelected(dirChooser.isMultiSelectionEnabled()); cb2.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { int state = e.getStateChange(); if(state == ItemEvent.SELECTED) { dirChooser.setMultiSelectionEnabled(true); } else { dirChooser.setMultiSelectionEnabled(false); } } }); thePanel.add(cb2); thePanel.add(Box.createVerticalStrut(5)); JCheckBox cb3 = new JCheckBox("Enable recursive mode"); cb3.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { int state = e.getStateChange(); if(state == ItemEvent.SELECTED) { dirChooser.putClientProperty("JDirChooser.recursiveModeEnabled", Boolean.TRUE); } else { dirChooser.putClientProperty("JDirChooser.recursiveModeEnabled", Boolean.FALSE); } } }); thePanel.add(cb3); thePanel.add(Box.createVerticalStrut(5)); return thePanel; } private JPanel createDialogPanel() { JPanel panel = new JPanel(); panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); JButton b = new JButton("Show dialog"); b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { showDialog(); } }); panel.add(b); return panel; } private void showDialog() { JDirChooser dirChooser = new JDirChooser(this.dirChooser.getRootFile()); dirChooser.setMultiSelectionEnabled(this.dirChooser.isMultiSelectionEnabled()); dirChooser.setFileHidingEnabled(this.dirChooser.isFileHidingEnabled()); dirChooser.setFileSelectionMode(this.dirChooser.getFileSelectionMode()); dirChooser.putClientProperty("JDirChooser.recursiveModeEnabled", this.dirChooser.getClientProperty("JDirChooser.recursiveModeEnabled")); showDialog(dirChooser); } private void showDialog(JDirChooser dirChooser) { String msg = "Please select directory"; Icon icon = UIManager.getIcon("OptionPane.informationIcon"); int option = dirChooser.showDialog(null, msg, icon); if(option == JDirChooser.OK_OPTION) { String message = null; if(dirChooser.isMultiSelectionEnabled()) { File[] files = dirChooser.getSelectedFiles(); message = "You selected files is:
" + formatMessage(files); } else { message = "You selected file is:
" + dirChooser.getSelectedFile(); } JOptionPane.showMessageDialog(null, message); } else if(option == JDirChooser.CANCEL_OPTION) { String message = "You has canceled the dialog!"; JOptionPane.showMessageDialog(null, message); } else { String message = "JDirChooser internal error occur!"; JOptionPane.showMessageDialog(null, message, null, JOptionPane.ERROR_MESSAGE); } } private String formatMessage(File[] files) { StringBuffer sb = new StringBuffer(); if(files != null) { sb.append(""); } else { sb.append(files); } return sb.toString(); } public static void main(String[] args) { DemoPanel demoPanel = new DemoPanel(); demoPanel.addDemo(new DirChooserDemo()); demoPanel.setTitle("JDirChooser Demo"); demoPanel.setDefaultCloseOperation(JBean.EXIT_ON_CLOSE); demoPanel.showFrame(); } }