0

所以我一直在努力尝试在我的 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 以便它获取文本字段中的数字。

4

3 回答 3

4

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

例如,当使用文本组件时,您可能会使用DocumentListener(请参阅如何编写文档侦听器)或DocumentFilter(请参阅实现文档过滤器)。

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

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

此外,我在上面引用的 Swing 教程有一个关于How to Write a Key Listener.

于 2013-06-13T21:53:18.317 回答
2
  1. 您收到错误是因为您的类没有实现该KeyListener接口。你需要有一个类声明public class turkey implements KeyListener,然后在你的类中你需要实现KeyListener接口定义的所有方法。
  2. 正确的方法是不要为此使用KeyListenerfor JTextField(或 any JTextComponent)。使用DocumentListeneror DocumentFilter(取决于您的用例)
  3. 不知道为什么您将匿名添加KeyListener到您的文本字段,然后还想添加您的类KeyListener实例
于 2013-06-13T21:53:30.050 回答
-1
jTextField2.addKeyListener((KeyListener) this);

上面的行是罪魁祸首。似乎您的课程没有实现KeyListener Infact,我认为您根本不需要那条线,因为您已经通过执行附加KeyListenerjTextField2jTextField2.addKeyListener(new ...

在以下 3 种方法中的任何一种中,您都可以使用 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.
    }
于 2013-06-13T21:52:08.863 回答