检查 JTextField 中的字符

3
我有一个为孩子们练习基本算术而编写的程序。在JFrame上有一个JTextField,学生在其中输入给定数学问题的答案(例如8+8,他们键入16,然后按回车键)。该字段只接受整数值作为条目,并通过DocumentFilter进行过滤。
这部分功能运行良好。我想做的是避免用户必须按回车键。理想情况下,当用户键入第一个数字(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);
                //}
            }
        };
    });

这段代码似乎有些问题,就好像它比实际输入慢一步。我的意思是,当用户按下“1”键(在我的8+8=16的例子中),控制台输出为空字符串。当他们按下“6”键时,输出为“1”。如果他们再按一个整数键,输出就变成了“16”。它总是慢一位。因此,我无法获取文本字段的全部内容以查看是否与正确答案匹配。
有人能看出我错在哪里吗?
谢谢!
2个回答

5

您可以使用DocumentListener实现此目的。在文本字段中更新文本之前,keyPressed可能已经触发。

请参阅如何编写文档侦听器以获取详细信息和示例。


5
请使用DocumentListener来实现此功能,而不是使用KeyListener。在这三个事件中,您将可以访问实际的文本内容。
要监听JTextField上的Enter键,请使用ActionListener
另外说明:几乎永远都不需要使用KeyListener。对于JTextComponent,请始终依赖于DocumentListener。对于其他所有情况,请使用适当的Swing键绑定。KeyListener真的是一个低级API。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接