我有一个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的事件处理程序让文本字段提交其内容。
如果这根本没有意义,或者我需要透露更多代码,我将很乐意详细说明。我花了一整天的时间来解决这个小问题只是为了找到挫折感。
答案 0 :(得分:0)
通过这个JTextField,我决定使用Key Bindings来确定何时按下Enter键以便提交"提交" JTextField的内容。
实际上你应该只是在文本字段中添加一个ActionListener。按下Enter键时将调用ActionListener。
如果您想提示并等待输入文字,那么您应该使用JOptionPane
。