java - jTextField 上的 KeyListener 不起作用

标签 java swing keyboard jtextfield keylistener

我将事件添加到我的 jTextField

jTextField1.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                jTextField1KeyTyped(evt);
            }
        });

这是我的代码的第二部分(负责处理键盘按钮):

 private void jTextField1KeyTyped(java.awt.event.KeyEvent evt) {                                     
        switch (evt.getKeyCode()) {
                case KeyEvent.VK_1:
                    print(one);
                    System.out.println("1");
                    break;
                case KeyEvent.VK_2:
                    print(two);
                    System.out.println("2");
                    break;
                case KeyEvent.VK_3:
                    print(three);
                    System.out.println("3");
                    break;
                case KeyEvent.VK_4:
                    print(four);
                    System.out.println("4");
                    break;
                case KeyEvent.VK_5:
                    print(five);
                    System.out.println("5");
                    break;
                case KeyEvent.VK_6:
                    print(six);
                    System.out.println("6");
                    break;
                case KeyEvent.VK_7:
                    print(seven);
                    System.out.println("7");
                    break;
                case KeyEvent.VK_8:
                    print(eight);
                    System.out.println("8");
                    break;
                case KeyEvent.VK_9:
                    print(nine);
                    System.out.println("9");
                    break;
                case KeyEvent.VK_0:
                    print(zero);
                    System.out.println("0");
                    break;
            }
    }                  

但是它不起作用。当我按下任何按钮时 - 什么也没有发生。

最佳答案

我强烈敦促您彻底改变策略。您不应该在 JTextField 内部使用 KeyListener,因为这会扰乱 JTextField 的功能。使用 DocumentListener 或 DocumentFilter 或其他更好的选项之一。由于您似乎没有限制输入,因此请使用通过 addDcoumentListener(...) 附加到 JTextField 文档的 DocumentListener。

即,

jTextField1.getDocument().addDocumentListener(new DocumentListener() {

    public void keyTyped(java.awt.event.KeyEvent evt) {

        void insertUpdate(DocumentEvent e) {
            // ... code to check document change here
        }

        void removeUpdate(DocumentEvent e){
            // ... code to check document change here
        }

        void changedUpdate(DocumentEvent e){
            // ... code to check document change here
        }

    }

});

编辑:如果您想捕获计算器的数字按键,则也不要使用此功能。而是使用键绑定(bind)。

关于java - jTextField 上的 KeyListener 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27610396/

相关文章:

java - 从 spring 配置引用值

java - 如何获取JRadioButton的文本值

java - 如何使用Java URL和URL连接类打开网站

ios - 自定义键盘的插件中断、无效错误

flutter - TextFormField横向 View 用 flutter 的键盘填充屏幕?

java - 如何创建一个列表,其中包含来自其他两个相等列表的元素?

java - 如何使用 java 将语言设置为 PhantomJs Ghostdriver?

java - 如何用Java中的Canvas根据屏幕的宽度和高度绘制字符串或矩形

iOS AssistiveTouch 使用自定义键盘时动画缓慢

java - MessageDigest 摘要() 方法