检查JTextField字符

时间:2013-02-06 23:38:22

标签: java swing

我有一个我为孩子们编写的程序来练习基本算术。 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);
                //}
            }
        };
    });

这段代码不太合适。好像它背后是一个角色。我的意思是当用户点击'1'键时(在我的8 + 8 = 16示例中),控制台输出是一个空字符串。当他们点击'6'键时,输出为'1'。如果他们然后按下另一个整数键,则输出为“16”。它总是落后一位数。因此,我无法捕获文本字段的全部内容以查看它是否与正确答案匹配。

任何人都能看到我错过的东西吗?

谢谢!

2 个答案:

答案 0 :(得分:5)

您应该使用DocumentListener来实现此目的。在更新字段中的文本之前,可能会触发keyPressed

有关详细信息和示例,请参阅How to Write a Document Listener

答案 1 :(得分:5)

使用DocumentListener代替KeyListener。在所有三个活动中,您都可以访问实际的文本内容。

要在JTextField上收听 Enter ,我们ActionListener

旁注:你几乎不需要KeyListener。在JTextComponent,始终依赖DocumentListener。对于所有其他人,请使用适当的Swing Key绑定。 KeyListener实际上是一个低级API。