package xapi.dev.gwt.gui;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
public class SingleFileSelector extends JPanel {
private static final long serialVersionUID = 1213610727860383569L;
private final JButton button;
private final JLabel label;
private final JFileChooser chooser;
private int mode;
private String buttonText;
public SingleFileSelector() {
super(new GridLayout(1, 2, 10, 5));
button = new JButton("Select File");
label = new JLabel();
chooser = new JFileChooser();
init();
}
public SingleFileSelector(String text) {
this();
buttonText = text;
button.setText(buttonText);
init();
}
public void setChooserType(int type) {
chooser.setFileSelectionMode(type);
this.mode = type;
if (null == buttonText)
button.setText(
"Select " + (
type == JFileChooser.DIRECTORIES_ONLY
? "Directory" :
type == JFileChooser.FILES_AND_DIRECTORIES
? "File or Directory" :
"File"
)
);
}
protected void init() {
if (getComponentCount() > 0)
return;
button.addActionListener(
new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//popup a JFileChooser
chooser.showOpenDialog(null);
}
}
);
chooser.addActionListener(
new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
File file = chooser.getSelectedFile();
if (null == file) {
} else {
switch (mode) {
case JFileChooser.DIRECTORIES_ONLY:
if (!file.isDirectory()) {
//show an error
}
case JFileChooser.FILES_ONLY:
case JFileChooser.FILES_AND_DIRECTORIES:
default:
}
setFile(file);
}
}
}
);
add(button);
// add(Box.createHorizontalGlue());
add(label);
setAlignmentX(0);
}
public void setFile(final File baseDir) {
SwingUtilities.invokeLater(
new Runnable() {
@Override
public void run() {
chooser.setCurrentDirectory(baseDir);
}
}
);
label.setText(baseDir.toString());
}
}