我有一个我为孩子们编写的程序来练习基本的算术.JFrame上有一个JTextField,其中学生键入给定数学问题的答案(如8 + 8,他们键入16,回车).此字段仅通过DocumentFilter接受整数值作为条目.
那部分工作正常.我想要做的是避免用户必须按Enter键.理想情况下,当用户键入第一个数字(1)时,检查是否1 == 16.如果不是,则没有任何反应.当他们随后键入6时,文本字段显示数字16.我想运行检查以验证16 == 16,然后处理该条目,就像用户也按Enter键一样.
txtAnswer.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
if (key == KeyEvent.VK_ENTER) {
respondToAnswer(isTimed);
} else {
/* Check if the correct answer has been entered */
System.out.println(txtAnswer.getText());
//int userAnswer = Integer.parseInt(txtAnswer.getText());
//if (userAnswer == correctAnswer {
// respondToAnswer(isTimed);
//}
}
};
});
Run Code Online (Sandbox Code Playgroud)
这段代码不太合适.好像它背后是一个角色.我的意思是当用户点击'1'键时(在我的8 + 8 = 16示例中),控制台输出是一个空字符串.当他们点击'6'键时,输出为'1'.如果他们然后按下另一个整数键,则输出为"16".它总是落后一位数.因此,我无法捕获文本字段的全部内容以查看它是否与正确答案匹配.
有人看到我错过了吗?
谢谢!
使用a DocumentListener而不是a KeyListener.在所有三个事件中,您都可以访问实际的文本内容.
要收听Enter关于JTextField的信息,我们一个ActionListener
旁注:你几乎不需要一个KeyListener.在JTextComponent,总是依靠一个DocumentListener.对于所有其他人,请使用适当的Swing Key绑定.KeyListener实际上是一个低级API.
| 归档时间: |
|
| 查看次数: |
902 次 |
| 最近记录: |