有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何从JTextField获取输入,类似于Scanner。下一个()?

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

  • PROGRAM: "What is your name?"
  • USER: (types in name and hits enter)
  • PROGRAM: "Welcome, (user's input)."

我可以从按键中提取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) 个答案

  1. # 1 楼答案

    不要让程序等待这是一个JFrame应用程序,不是命令行工具,所以在开发涉及窗口的东西时,不要使用编写命令行工具的思维方式。想象一下,如果程序停止并在第^{行之后等待,会发生什么。窗口将冻结,事件将无法处理,这是一种非常糟糕的用户体验

    我建议您在事件处理程序中为按钮单击执行所有操作

    // 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("");
    
  2. # 2 楼答案

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

    例如:

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

    首先,我认为你必须在文本框中添加一个监听器。如果您使用的是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键时,监听器中的函数将运行