Как получить входные данные из JTextField аналогично Scanner.next ()? - PullRequest
0 голосов
/ 17 января 2019

Я пытался выяснить, как получить строковые и целочисленные входные данные от нажатия «Enter» в JTextField.Я хочу, чтобы это было похоже на то, как Scanner.next() получает входные данные - программа «ждет», пока не будет введен входной сигнал, и соответственно сохранит его для дальнейшего использования.Я хочу быть в состоянии сделать это, потому что моя программа запрашивает ввод у пользователя, а затем отображает соответствующие тексты.Быстрый пример:

  • ПРОГРАММА: «Как тебя зовут?»
  • ПОЛЬЗОВАТЕЛЬ: (вводятся имена и хиты)
  • ПРОГРАММА: «Добро пожаловать, (ввод пользователя). "

Я могу извлечь содержимое JTextField из нажатия кнопки, но я не знаю, как заставить программу" ждать "ввода («подождите», пока не будет нажата кнопка ввода).

public static String getStringInput(String prompt)
{
    console.append(prompt);

    String input;

    //Here I need to get the input from a JTextField after I've pressed 
    //enter.

    return input;
}

Если кто-нибудь знает лучший способ сделать эту систему ввода и ответа, это было бы очень приятно.

спасибо.

Ответы [ 3 ]

0 голосов
/ 17 января 2019

Один из способов - использовать JOptionPane.showInputDialog .Приложение «останавливается» с помощью модального диалога, и вы очень легко получаете его ввод.

Пример:

//returns null if user closes the dialog.
String answer = JOptionPane.showInputDialog("What is your first name?");
0 голосов
/ 17 января 2019

Во-первых, я думаю, что вы должны добавить слушателя в текстовое поле.Если вы используете JTextField, это будет:

JTextField text = new JTextField();
text.addKeyListener(new KeyListener {
    @Overwrite
    public void keyPressed(event e) {
        if(e.keyCode = SWT.CR) { // SWT.CR is key code of Enter
            // Call your function
        }
    }
}

Программа будет прослушивать событие клавиатуры.Когда вы нажимаете ENTER, функция внутри слушателя запускается.

0 голосов
/ 17 января 2019

Не позволяйте программе ждать. Это JFrame приложение, а не инструмент командной строки, поэтому не используйте мышление при написании инструментов командной строки, когда вы разрабатываете что-то, что включает окно. Представьте, что произойдет, если программа просто остановится и будет ждать после строки String input;. Окно будет зависать, и события не будут обрабатываться, что очень плохо для пользователя.

Я предлагаю вам сделать все внутри обработчика событий для нажатия кнопки.

// at class level
String[] prompts = new String[] { "prompt1", "prompt2", "prompt3" };
int currentPrompt = 0;

// inside the event handler
String text = textfield.getText();
switch (currentPrompt) {
    case 0:
        // text contains the input for prompt1
    case 1:
        // text contains the input for prompt2
    case 2:
        // text contains the input for prompt3
}

Внутри корпусов коммутаторов вы можете перейти к следующему запросу:

currentPrompt++; // or set it equal to some other number if you wan to jump around
promptLabel.setText(prompts[currentPrompt]);
textField.setText("");
...