-
Erik Diers authoredErik Diers authored
FileChooserPanel.java 2.38 KiB
package uiutils;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.filechooser.FileFilter;
public class FileChooserPanel extends JPanel implements IOutput<File>, ActionListener{
private static final long serialVersionUID = 3136641561102977065L;
private JButton button;
private JLabel text;
private File out;
private int maxFilenameCharactersShown;
private boolean selectFile = false;
private String fileEnding = "";
public FileChooserPanel(String btnTxt) {
this(btnTxt, 30);
}
public FileChooserPanel(String btnTxt, int maxFilenameCharactersShown) {
super();
this.setLayout(new FlowLayout(FlowLayout.LEFT));
this.maxFilenameCharactersShown = maxFilenameCharactersShown;
button = new JButton(btnTxt);
button.addActionListener(this);
text = new JLabel("no folder selected");
this.add(button);
this.add(text);
}
public FileChooserPanel switchToFileSelect(String fileEndingFilter) {
selectFile = true;
this.fileEnding = fileEndingFilter;
text.setText("no file selected");
return this;
}
@Override
public void actionPerformed(ActionEvent e) {
JFileChooser chooser = new JFileChooser();
chooser.setCurrentDirectory(new java.io.File("."));
if (!selectFile) {
chooser.setDialogTitle("Select Folder");
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
} else {
chooser.setDialogTitle("Select File");
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
chooser.setFileFilter(new FileFilter() {
@Override
public String getDescription() {
return "*" + fileEnding;
}
@Override
public boolean accept(File f) {
return f.getName().endsWith(fileEnding) || f.isDirectory();
}
});
}
//
// disable the "All files" option.
//
chooser.setAcceptAllFileFilterUsed(false);
//
if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
out = chooser.getSelectedFile();
text.setText(out.getAbsolutePath().substring(
(int)Math.max(0, out.getAbsolutePath().length() - maxFilenameCharactersShown)));
this.revalidate();
}
}
@Override
public File getOutput() {
return out;
}
}