用于从 JTextField 获取文本的 KeyBinding

KeyBinding for getting text from JTextField

我有一个 JTextField 可以在用户提交之前保存用户的输入(如果您愿意,可以像一个控制台 Scanner 对象)。我的主要 class 有一个从用户那里获取输入的方法。使用 Scanner 对象很容易做到:scannerObject.nextLine()。有了这个 JTextField,我决定使用键绑定来确定何时按下 Enter 键,以便 "submit" JTextField 的内容。我设置了键绑定没问题,但我不知道如何让主程序等到按下回车键来查找文本。如果我使用循环,程序会卡住,无法注册按键。

这是一个尝试从 JTextField:

获取输入的方法
public static String getStrInput() {
    // Request input
    display.print(">> ");
    needInput = true;
    nextInput = "";

    // Wait until a string is input from the text field
    while (nextInput.isEmpty());    // Wait

    needInput = false;

    return nextInput;
}

这是在我的键绑定中按下 Enter 键时的事件处理程序 class:

private class SubmitAction extends AbstractAction implements ActionListener {
    /**
     * Makes Java happy.
     */
    private static final long serialVersionUID = 1L;

    /* -- Constructor -- */
    public SubmitAction() {
    }

    /* -- Method -- */

    @Override
    public void actionPerformed(ActionEvent e) {
        if (Game.needInput())
            Game.submitTextField();
    }
}

注意:所有 submitTextField() 方法所做的就是调用 textField.getText() 方法并将 nextInput 字段(参见我的第一个方法)设置为返回的字符串。

应该发生的是应该注册输入请求(这是 needInput = true 行),然后键绑定 class 应该在 Enter 键按下时提交文本字段按下(因为 Game.needInput() 条件现在 returns 为真)。但是,在我的 getStrInput() 方法中,程序卡在了 while (nextInput.isEmpty()); 循环中。我认为这会发生,但我不知道如何让主程序等到键绑定的事件处理程序让文本字段提交其内容。

如果这完全没有意义或者我需要揭示更多代码,我会很乐意详细说明。我花了一整天的时间来解决这个小问题,只是为了找到挫败感。

With this JTextField, I decided to use Key Bindings to determine when the Enter key was pressed in order to "submit" the contents of the JTextField.

实际上,您应该只向文本字段添加一个 ActionListener。当按下 Enter 键时将调用 ActionListener。

如果你想提示并等待输入文本,那么你应该使用 JOptionPane