繁体   English   中英

jTextField上的KeyListener无法正常工作

[英]KeyListener on jTextField is not working

我在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(...)将DocumentListener附加到JTextField的Document上。

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
        }

    }

});

编辑:如果您想要捕获计算器的数字键按下,那么也不要使用它。 而是使用键绑定。

好吧,应该使用DocumentListener或ChangeListener,也可以选择FocusListener,keyListener可以做到这一点,但是如果要避免使用KeyBindings来解决焦点问题,或者使用它时会遇到一些焦点问题,或者可以尝试显式调用grabFocus()对于特定组件的方法,当使用组件注册时,keyListener需要该组件处于焦点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM