KeyListener的正确用法是什么?

时间:2013-06-13 21:49:53

标签: java swing actionlistener jtextfield keylistener

所以我一直在努力尝试在我的jTextFields中提取数据,这个错误信息不断弹出,指的是:

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: calcu.turkey (<--my class) cannot be cast to java.awt.event.KeyListener

      jTextField2.addKeyListener(new java.awt.event.KeyListener() {

        @Override
        public void keyTyped(KeyEvent ke) {
            //To change body of generated methods, choose Tools | Templates.
        }

        @Override
        public void keyPressed(KeyEvent ke) {
          //To change body of generated methods, choose Tools | Templates.
        }

        @Override
        public void keyReleased(KeyEvent ke) {
            //To change body of generated methods, choose Tools | Templates.
        }
    });
    jTextField2.addKeyListener((KeyListener) this);
    jTextField2.setFont(new java.awt.Font("Times New Roman", 0, 10)); // NOI18N
    jTextField2.setText("0");
    getContentPane().add(jTextField2);
    jTextField2.setBounds(250, 40, 70, 20);

最重要的是这一行:jTextField2.addKeyListener((KeyListener) this);因为它将(KeyListener)视为错误。我想知道如何正确添加KeyListener,以便它在文本字段中获取数字。

3 个答案:

答案 0 :(得分:4)

您不使用KeyListener。您很少需要这样做。有更好的API可供使用。

例如,在使用文字组件时,您可能会使用DocumentListener(请参阅How to Write a Document Listener)或DocumentFilter(请参阅Implementing a Document Filter)。

  

我想知道如何正确添加KeyListener以便它在文本字段中获取数字。

通常你会抓住一些不相关的事件上的数字。例如,您在表单上有一个“提交”按钮。然后在这种情况下,您将向该按钮添加一个ActionListener,然后在您想要提交表单时使用文本字段的getText()方法。

另外,我在上面引用的Swing教程中有一节How to Write a Key Listener

答案 1 :(得分:2)

  1. 您收到错误是因为您的类没有实现KeyListener接口。您需要有类public class turkey implements KeyListener之类的类声明,然后在您的类中需要实现KeyListener接口定义的所有方法。
  2. 正确的方法是不要对KeyListener(或任何JTextField)使用JTextComponent。使用DocumentListenerDocumentFilter(取决于您的用例)
  3. 不确定为什么您将匿名KeyListener添加到文字字段中,然后又希望将您的班级实例添加为KeyListener

答案 2 :(得分:-1)

jTextField2.addKeyListener((KeyListener) this);

上述行是罪魁祸首。好像你的班级没有实施KeyListener 事实上,我认为您根本不需要该行,因为您已经通过执行KeyListener

jTextField2附加到jTextField2.addKeyListener(new ...

在以下任何一种方法中,您可以使用ke.getKeyCode()或ke.getKeyChar()来检索已按下的键。

@Override
    public void keyTyped(KeyEvent ke) {
        //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public void keyPressed(KeyEvent ke) {
      //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public void keyReleased(KeyEvent ke) {
        //To change body of generated methods, choose Tools | Templates.
    }