检查JTextField字符

And*_*Dev 3 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);
                //}
            }
        };
    });
Run Code Online (Sandbox Code Playgroud)

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

有人看到我错过了吗?

谢谢!

ten*_*ica 5

你应该DocumentListener为此目的使用. keyPressed可能在更新字段中的文本之前触发.

有关详细信息和示例,请参见如何编写文档侦听器.


Gui*_*let 5

使用a DocumentListener而不是a KeyListener.在所有三个事件中,您都可以访问实际的文本内容.

要收听Enter关于JTextField的信息,我们一个ActionListener

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