package mapmaker; import java.awt.*; import java.net.*; import java.awt.event.*; import javax.swing.*; public class FileChooserField extends JPanel { public static final int CHOOSE_DIRECTORY = 0; public static final int CHOOSE_FILE = 1; JTextField mFileField = new JTextField(); JButton mChooserButton = new JButton(); public FileChooserField(int aType) { super(new BorderLayout(6, 0)); mChooserButton.setAction(new ChooseAction(aType)); mFileField.setEditable(false); mFileField.setPreferredSize(new Dimension(160, 0)); add(mFileField, BorderLayout.CENTER); add(mChooserButton, BorderLayout.EAST); } public String getText() { return mFileField.getText(); } public void setText(String aString) { mFileField.setText(aString); } class ChooseAction extends AbstractAction { private static final String NAME = "Choose"; private static final String SMALL_ICON = "Open16.gif"; private static final String LARGE_ICON = "Open24.gif"; private static final String SHORT_DESCRIPTION = "Choose"; private static final int MNEMONIC_KEY = 'C'; public ChooseAction(int aType) { putValue(Action.NAME, NAME); putValue(Action.SMALL_ICON, Utils.getIcon(SMALL_ICON)); putValue("largeIcon", Utils.getIcon(LARGE_ICON)); putValue(Action.SHORT_DESCRIPTION, SHORT_DESCRIPTION); switch (aType) { case CHOOSE_DIRECTORY : putValue(Action.LONG_DESCRIPTION, "Choose a Directory"); break; case CHOOSE_FILE : putValue(Action.LONG_DESCRIPTION, "Choose a File"); break; } putValue(Action.MNEMONIC_KEY, new Integer(MNEMONIC_KEY)); putValue(Action.ACTION_COMMAND_KEY, ACTION_COMMAND_KEY); } public void actionPerformed(ActionEvent e) { JFileChooser fileChooser = new JFileChooser(); fileChooser.setMultiSelectionEnabled(false); fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); int returnVal = fileChooser.showDialog(FileChooserField.this, "Select"); if (returnVal != JFileChooser.APPROVE_OPTION) { return; } mFileField.setText(fileChooser.getSelectedFile().getAbsolutePath()); } } }