001 package view;
002
003 import javax.swing.*;
004 import java.awt.*;
005 import java.awt.event.ActionEvent;
006 import java.awt.event.ActionListener;
007
008 /**
009 * Dialog to enter a string.
010 *
011 * @author Mathias Ricken
012 */
013 public class InputStringDialog {
014 private JDialog _dialog;
015 private JButton[] _optButtons;
016 private JTextField _textField;
017 private boolean _cancelled;
018
019 /**
020 * Creates a new input string dialog and all its controls.
021 *
022 * @param parent parent dialog for the dialog
023 * @param title window title
024 */
025 public InputStringDialog(JDialog parent, String title) {
026 _dialog = new JDialog(parent, title, true);
027 _dialog.setContentPane(makeOptionsPanel());
028 _dialog.pack();
029 _dialog.setResizable(false);
030 }
031
032 /**
033 * Creates a new input string dialog and all its controls.
034 *
035 * @param parent parent frame for the dialog
036 * @param title window title
037 */
038 public InputStringDialog(Frame parent, String title) {
039 _dialog = new JDialog(parent, title, true);
040 _dialog.setContentPane(makeOptionsPanel());
041 _dialog.pack();
042 _dialog.setResizable(false);
043 }
044
045 /**
046 * Show the modal dialog.
047 *
048 * @return contents of text field
049 */
050 public String showDialog() {
051 // center dialog in middle of parent frame
052 _cancelled = false;
053 Component parent = _dialog.getParent();
054 _dialog.setLocation(parent.getX() + parent.getWidth() / 2 - _dialog.getSize().width / 2,
055 parent.getY() + parent.getHeight() / 2 - _dialog.getSize().height / 2);
056 _dialog.setVisible(true); // Modal dialog will block until setVisible(false), see ok/cancel methods
057
058 return (_cancelled)?null:_textField.getText();
059 }
060
061 // callback when user clicks cancel button
062 private void cancelClicked() {
063 _textField.setText("");
064 _cancelled = true;
065 _dialog.setVisible(false);
066 }
067
068 // callback when user clicks ok button
069 private void okClicked() {
070 _dialog.setVisible(false);
071 }
072
073 /**
074 * Build options dialog.
075 *
076 * @return options pane
077 */
078 private JOptionPane makeOptionsPanel() {
079 JPanel myControls = new JPanel();
080 myControls.setLayout(new BoxLayout(myControls, BoxLayout.Y_AXIS));
081
082 _textField = new JTextField();
083 myControls.add(_textField);
084
085 JOptionPane optPane = new JOptionPane(myControls, JOptionPane.QUESTION_MESSAGE);
086 _optButtons = new JButton[]{new JButton("Create"), new JButton("Cancel")};
087 optPane.setOptions(_optButtons);
088 optPane.setInitialValue(_optButtons[0]);
089 _optButtons[1].addActionListener(new ActionListener() {
090 public void actionPerformed(ActionEvent e) {
091 cancelClicked();
092 }
093 });
094 _optButtons[0].addActionListener(new ActionListener() {
095 public void actionPerformed(ActionEvent e) {
096 okClicked();
097 }
098 });
099
100 return optPane;
101 }
102 }
103