package com.limegroup.gnutella.gui; import java.awt.Container; import java.awt.Frame; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.Box; import javax.swing.JDialog; /** * This class creates a generic input field that gets a line of text input * from the user in a <tt>JDialog</tt>. It gives the user "OK" and * "Cancel" button options, and the constructor takes keys for locale- * specific strings that allow customization of the dialog caption as well * as the label on the input field. */ //2345678|012345678|012345678|012345678|012345678|012345678|012345678|012345678| public final class InputFieldDialog { /** * The return code for when the user has pressed ok but not entered * any text. */ public static final int NO_TEXT_ENTERED = 77; /** * The return code for when the user cancelled the action. */ public static final int CANCELLED = 78; /** * The return code for when the user has entered some text. */ public static final int TEXT_ENTERED = 79; /** * The <tt>JDialog</tt> instance for the dialog window. */ private JDialog _dialog; /** * The main panel of the dialog. */ private final PaddedPanel MAIN_PANEL = new PaddedPanel(); /** * The text field displayed in the dialog. */ private final SizedTextField TEXT_FIELD = new SizedTextField(); /** * Stored value for the return code specifying what action * the user took. */ private int _returnCode = NO_TEXT_ENTERED; /** * Constructs an input field with a generic caption and a specialized * label for the field. * * @param LABEL_KEY the key for the locale-specific label of the field */ public InputFieldDialog(final String LABEL_KEY) { this("INPUT_FIELD_GENERIC_CAPTION", LABEL_KEY); } /** * Constructs an input field using the specified locale-specific keys * for both the caption and the field label. * * @param CAPTION_KEY the key for the locale-specific dialog caption * @param LABEL_KEY the key for the locale-specific label of the field */ public InputFieldDialog(final String CAPTION_KEY, final String LABEL_KEY) { String caption = GUIMediator.getStringResource(CAPTION_KEY); Frame frame = GUIMediator.getAppFrame(); _dialog = new JDialog(frame, caption, true); _dialog.setSize(340, 180); LabeledComponent component = new LabeledComponent(LABEL_KEY, TEXT_FIELD, LabeledComponent.LEFT_GLUE); String[] buttonLabelKeys = { "GENERAL_OK_BUTTON_LABEL", "GENERAL_CANCEL_BUTTON_LABEL" }; String[] buttonLabelTips = { "GENERAL_OK_BUTTON_TIP", "GENERAL_CANCEL_BUTTON_TIP" }; ActionListener[] buttonListeners = { new OKListener(), new CancelListener() }; ButtonRow buttons = new ButtonRow(buttonLabelKeys, buttonLabelTips, buttonListeners, ButtonRow.X_AXIS, ButtonRow.LEFT_GLUE); Container contentPane = _dialog.getContentPane(); BoxPanel componentPanel = new BoxPanel(BoxPanel.Y_AXIS); componentPanel.add(Box.createVerticalGlue()); componentPanel.add(component.getComponent()); componentPanel.add(Box.createVerticalGlue()); MAIN_PANEL.add(componentPanel); MAIN_PANEL.add(Box.createVerticalGlue()); MAIN_PANEL.add(buttons); contentPane.add(MAIN_PANEL); } /** * Displays the modal dialog, returning the appropriate return code to * the caller. The return code can be one of the following: * * NO_TEXT_ENTERED * CANCELLED * TEXT_ENTERED<p> * * @return the return code for the window */ public int showDialog() { setVisible(true); return _returnCode; } /** * Makes the dialog visible or invisible depending on the parameter. * * @param visible specifies whether the dialog should be made visible or * invisible */ private void setVisible(boolean visible) { if(visible) { _dialog.setLocationRelativeTo(GUIMediator.getAppFrame()); } _dialog.setVisible(visible); } /** * Returns the text contained in the wrapped text field. * * @return the text contained in the text field */ public String getText() { return TEXT_FIELD.getText(); } /** * Returns the return code of the input window. This can be one of:<p> * * NO_TEXT_ENTERED * CANCELLED * TEXT_ENTERED<p> * * @return the return code for the window */ //private int getReturnCode() { //return _returnCode; //} /** * This class handles the clicking of the ok button in the dialog. */ private class OKListener implements ActionListener { public void actionPerformed(ActionEvent e) { if(TEXT_FIELD.getText().equals("")) _returnCode = NO_TEXT_ENTERED; else _returnCode = TEXT_ENTERED; setVisible(false); } } /** * This class handles the clicking of the cancel button in the dialog. */ private class CancelListener implements ActionListener { public void actionPerformed(ActionEvent e) { _returnCode = CANCELLED; setVisible(false); } } }