/*
* $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("