Java: Как я могу определить, что пользователь завершил сохранение своего имени без использования actionListener? - PullRequest
1 голос
/ 11 сентября 2011

В основном я не хочу получать строку от пользователя, я создал класс с именем «frames», в котором у меня есть множество методов, таких как exitChoice (), infoPop (), ect ... Я хочусоздайте один с именем getText (), и это то, что у меня есть до сих пор:

        public String getText()
        {
            JDialog textBox = new JDialog(frame, "Save Name", true);

            JTextField inputField = new JTextField(18);
            inputField.setText(save == null ? "new save" : save.saveName);

            textBox.setBounds(width, height, 275, 70);
            textBox.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
            textBox.setLayout(new FlowLayout());
            textBox.setAlwaysOnTop(true);
            textBox.setResizable(false);
            textBox.add(inputField);
            textBox.setVisible(true);

            return inputField.getText();
        }

теперь я знаю, что это не сработает, просто зависает игра, и я должен прекратить ее внешне, я такжепонимаю, почему это не работает, это не проблема, я также знаю, как добавить JButton, слушатель действия и обработать его оттуда,

В основном я пытаюсь создать простой простой метод, которыйполучает строку от пользователя, которая ВСЕ содержится в методе.

В идеале я хотел бы написать строку, которая будет читать по строкам

// РЕДАКТИРОВАТЬ: я знаю метод getText () существует, извините, если это вводит в заблуждение, я исправлю это

//String saveName = new JTextField.getText();
String saveName = new JTextInputGetterBoxThing();

, но, насколько я обнаружил, этого пока не существует, есть ли у кого-нибудь идеи?или в идеале знаю один лайнер, который я пропустил?

Ответы [ 3 ]

2 голосов
/ 11 сентября 2011

Я думаю, что вам нужен метод JOptionPane.showInputDialog.Как-то так?

public class GetUserInput {

    public static String getUserInput() {
        return JOptionPane.showInputDialog("Type Something");
    }

    public static void main(String[] args) {
        System.out.println("User Input: " + getUserInput());
    }
}

Это показывает диалог с подсказкой «Введите что-то» и текстовое поле для ввода.Все, что пользователь вводит в текстовое поле, возвращается getUserInput().

1 голос
/ 11 сентября 2011

Честно говоря, я не уверен, что полностью понял вашу проблему. Тем не мение, Вот учебник о том, как правильно создавать диалоги в Swing.

Если вы используете

int ret = JOptionPane.showOptionDialog(new JDialog(), ...);

Ввод основного кадра вашего приложения блокируется, пока показанный JDialog не будет закрыт. Если вы не хотите использовать ActionListener или что-то похожее (DocumentListener, ...), вы можете заставить пользователя вставить значение в JTextField, нажать кнопку «ОК» и, когда showOptionDialog вернется, вручную получить текст JTextField. с getText ().

EDIT: Я пытаюсь немного расширить свой ответ. Расширяет JDialog для создания желаемого диалога:

public class CustomDialog extends JDialog{
    private JPanel panel;
    private JTextField field;
    public CustomDialog(){
        panel = new JPanel(); //create a panel possibly with a LayoutManager
        field = new JTextField();
    }
    public JTextField getField(){
        return this.field;
    }

}

Затем покажите диалоговое окно, где оно вам нужно, и проверьте текст поля, когда оно вернется:

CustomDialog dialog = new CustomDialog();
int ret = JOptionPane.showOptionDialog(dialog, ...);

String text = dialog.getField().getText();
0 голосов
/ 12 сентября 2011
        public String getSaveName()
        {
            boolean textGot = false;
            String returnText = null;
            while (!textGot)
                {
                    returnText = (String) JOptionPane.showInputDialog(hub.frame, "Enter the name of your save:\n", "Save Box",
                            JOptionPane.PLAIN_MESSAGE, null, null, save == null ? "new save" : save.saveName);

                    if ((returnText != null) && (returnText.length() > 0))
                        {
                            textGot = true;
                        }
                }
            return returnText;
        }

Вот последний метод, который я использую, гораздо чище, чем у старой установки, которая заключалась в создании крошечного фрейма и добавлении текстового поля и кнопки со слушателем!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...