package osm.jp.gpx.matchtime.gui;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.io.File;
import java.io.FileNotFoundException;
import javax.swing.JButton;
import javax.swing.JFileChooser;
@SuppressWarnings("serial")
public abstract class ParameterPanelFolder extends ParameterPanel implements ActionListener
{
JFileChooser fc;
JButton selectButton;
int chooser;
/**
* コンストラクタ
* ディレクトリのみ選択可能なダイアログ
* @param label
* @param text
*/
public ParameterPanelFolder(String name, String label, String text) {
this(name, label, text, JFileChooser.DIRECTORIES_ONLY);
}
public ParameterPanelFolder(String name, String label, String text, int chooser) {
super(name, label, text);
// Create a file chooser
this.chooser = chooser;
// "選択..."
selectButton = new JButton(
i18n.getString("button.select"),
AdjustTerra.createImageIcon("/images/Open16.gif")
);
selectButton.addActionListener(this);
this.add(selectButton);
}
public void setEnable(boolean f) {
super.setEnabled(f);
selectButton.setEnabled(f);
}
public File getDirectory() throws FileNotFoundException {
String path = this.argField.getText();
if (path == null) {
throw new FileNotFoundException("Folder is Not specifiyed yet.");
}
File sdir = new File(path);
if (!sdir.exists()) {
throw new FileNotFoundException(String.format("Folder '%s' is Not exists.", path));
}
if (!sdir.isDirectory()) {
throw new FileNotFoundException(String.format("Folder '%s' is Not directory.", path));
}
return sdir;
}
/**
* 有効な値が設定されているかどうか
*
* @return [folder.text=有効なディレクトリを示している]
*/
@Override
public boolean isEnable() {
String text = this.argField.getText();
if (text == null) {
return false;
}
try {
getDirectory();
return true;
}
catch (Exception e) {
return false;
}
}
@Override
public void propertyChange(PropertyChangeEvent evt) {
// TODO Auto-generated method stub
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == selectButton){
File sdir;
try {
sdir = getDirectory();
} catch (FileNotFoundException ex) {
sdir = new File(".");
this.argField.setText(sdir.getAbsolutePath());
}
if (sdir.exists()) {
this.fc = new JFileChooser(sdir);
}
else {
this.fc = new JFileChooser();
}
this.fc.setFileSelectionMode(this.chooser);
int returnVal = this.fc.showOpenDialog(ParameterPanelFolder.this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = this.fc.getSelectedFile();
String text = file.getAbsolutePath();
this.argField.setText(text);
}
}
}
}