jTextField上的KeyListener无法正常工作

Mic*_*źdź 2 java keyboard swing keylistener jtextfield

我在jTextField中添加了事件

jTextField1.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                jTextField1KeyTyped(evt);
            }
        });
Run Code Online (Sandbox Code Playgroud)

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

 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;
            }
    }                  
Run Code Online (Sandbox Code Playgroud)

但它不起作用.当我任何按钮 - 没有任何事情发生.

Hov*_*els 6

我强烈建议你改变你的方式.您不应该在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
        }

    }

});
Run Code Online (Sandbox Code Playgroud)

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

  • @MichałGwóźdź:请查看[教程](http://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html). (2认同)