如何从类似于Scanner.next()的JTextField获取输入?

时间:2019-01-17 06:45:29

标签: java swing actionlistener jtextfield

我一直在尝试找出如何通过在JTextField中按“ Enter”来接收字符串和整数输入。我希望它类似于Scanner.next()接收输入的方式-程序“等待”直到给出输入,然后将其适当存储以备将来使用。我希望能够这样做,因为我的程序要求用户输入内容,然后显示相应的文本。快速示例:

  
      
  • 程序:“你叫什么名字?”
  •   
  • 用户:(输入名称和点击进入)
  •   
  • 程序:“欢迎您,(用户的输入)。”
  •   

我可以通过按下按钮来提取JTextField的内容,但是我不知道如何让程序“等待”进行输入(“等待”直到按下Enter)。

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 :(得分:1)

不要让程序等待。这是一个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("");

答案 1 :(得分:0)

一种方法是使用JOptionPane.showInputDialog。应用程序通过模式对话框“停止”,您可以非常轻松地获取他的输入。

示例:

//returns null if user closes the dialog.
String answer = JOptionPane.showInputDialog("What is your first name?");

答案 2 :(得分:-2)

首先,我认为您必须在文本框中添加一个侦听器。如果您使用的是#sidebar { background-color: #e0e0e0; border: 1px solid red; height: 100%; overflow-x: hidden; overflow-y: auto; position: fixed; top: 0; right: 0; bottom: 0; width: 100%; } .hide { animation-name: hide; animation-duration: 1s; left: -100%; } .show { animation-name: show; animation-duration: 1s; } ,则应该是:

JTextField

程序将监听键盘事件。当您按ENTER键时,侦听器内部的功能将运行。