【问题标题】:Checking JTextField Characters检查 JTextField 字符
【发布时间】:2013-02-06 23:38:21
【问题描述】:

我为我的孩子编写了一个程序来练习基本算术。 JFrame 上有一个 JTextField,学生在其中键入给定数学问题的答案(例如 8+8,他们键入 16,Enter)。此字段仅接受整数值作为 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”。它总是落后一位数。因此,我无法捕获文本字段的全部内容以查看它是否与正确答案匹配。

有人看到我错过了什么吗?

谢谢!

【问题讨论】:

    标签: java swing


    【解决方案1】:

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

    要在 JTextField 上侦听 Enter,请使用 ActionListener

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

    【讨论】:

    • 很好的建议。非常感谢!
    【解决方案2】:

    您应该为此使用DocumentListenerkeyPressed 可能在字段中的文本更新之前被触发。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-17
      • 1970-01-01
      • 2014-04-02
      • 1970-01-01
      • 2014-10-19
      • 2017-07-17
      • 2012-01-07
      相关资源
      最近更新 更多