用于从JTextField获取文本的KeyBinding

时间:2017-05-27 22:33:48

标签: java input key-bindings

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

这是一种尝试从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;
}

这是在我的Key Binding类中按Enter键时的事件处理程序:

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行),然后Key Binding类应该在按下Enter键时提交文本字段(因为{{ 1}}条件现在返回true)。但是,在我的Game.needInput()方法中,程序卡在getStrInput()循环中。我想这会发生,但我不知道如何让主程序等到Key Binding的事件处理程序让文本字段提交其内容。

如果这根本没有意义,或者我需要透露更多代码,我将很乐意详细说明。我花了一整天的时间来解决这个小问题只是为了找到挫折感。

1 个答案:

答案 0 :(得分:0)

  

通过这个JTextField,我决定使用Key Bindings来确定何时按下Enter键以便提交"提交" JTextField的内容。

实际上你应该只是在文本字段中添加一个ActionListener。按下Enter键时将调用ActionListener。

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