/*
* DirectoryOptionField.java
*
* Created on Nov 23, 2007, 7:25:27 PM
*
* Implements an option field for selecting a directory
*
*/
package com.pugh.sockso.gui.controls;
import com.pugh.sockso.Properties;
import com.pugh.sockso.resources.Locale;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.JTextField;
import javax.swing.JFileChooser;
import java.awt.BorderLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.io.File;
public class DirectoryOptionField extends JPanel implements ActionListener {
private Properties p;
private String name;
private JFrame parent;
private JButton browse;
private JTextField field;
public DirectoryOptionField( JFrame parent, Properties p, String name, Locale locale ) {
this.parent = parent;
this.p = p;
this.name = name;
initComponents( locale );
initLayout();
}
private void initComponents( Locale locale ) {
browse = new JButton( locale.getString("gui.label.browse") );
browse.addActionListener( this );
field = new JTextField();
field.setEditable( false );
setPath( p.get(name) );
}
private void initLayout() {
setLayout( new BorderLayout() );
add( field, BorderLayout.CENTER );
add( browse, BorderLayout.EAST );
}
/**
* sets the path in the text field
*
* @param path the path to set
*
*/
protected void setPath( String path ) {
field.setText( path );
}
/**
* the browse button has been clicked
*
* @param evt the button click event
*
*/
public void actionPerformed( ActionEvent evt ) {
File folder = null;
if ( (folder = chooseFolder()) != null ) {
String path = folder.getAbsolutePath();
p.set( name, path );
p.save();
setPath( path );
}
}
/**
* shows a dialog to choose a folder, if nothing is selected or cancel is
* clicked then null is returned, otherwise you'll get the folder
*
* @return folder selected, or null
*
*/
protected File chooseFolder() {
JFileChooser chooser = new JFileChooser();
chooser.setFileSelectionMode( JFileChooser.DIRECTORIES_ONLY );
return chooser.showOpenDialog(parent) == JFileChooser.APPROVE_OPTION
? chooser.getSelectedFile()
: null;
}
}