在NetBeans中使用KeyListener作为计算器

时间:2013-06-02 02:46:39

标签: java swing keylistener keyevent actionevent

我在NetBeans中编写了一个计算器,它运行良好。但是,我必须实际单击按钮以插入数字,并尝试使用KeyListener来解决这个问题。我将所有数字和功能按钮设置在JPanel命名按钮内。我在一个名为display的JPanel中有我的显示标签。

我将我的类设置为实现KeyListener,并插入了KeyPressed,-Typed和-Released方法;但是我从那里停留了。我不确定如何使我的按钮实际上听取KeyPressed事件,当它听到事件时 - 激活按钮。此外,我的按钮以其编号命名(例如,零按钮被命名为零,一个按钮是一个,等等。)

我已经读过你实际上必须使用:something.addKeyListener(something)在某处实现KeyListener; 但我似乎无法弄清楚这一点。

我可以在这里得到一些帮助吗?我是Java的新手,这是我的第一个个人项目。如果我没有提供足够的信息,请告诉我。

编辑:我的大多数代码都是NetBeans生成的,我不能编辑组件的初始化,这似乎是我认为的问题?

我的班级声明:

public class Calculator extends javax.swing.JFrame implements KeyListener {
 //Creates new form Calculator
public Calculator() {
    initComponents();
}

我的一个buttonPressed操作(所有操作都与实际编号的更改相同):

private void zeroActionPerformed(java.awt.event.ActionEvent evt) {                                     
    if (display.getText().length() >= 16)
    {
        JOptionPane.showMessageDialog(null, "Cannot Handle > 16 digits");
        return;
    }
    else if (display.getText().equals("0"))
    {
        return;
    }
    display.setText(display.getText().concat("0"));

NetBeans提供的主要方法:

public static void main(String args[]) {
    /* Create and display the form */
    java.awt.EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            new Calculator().setVisible(true);
        }
    });
}

生成的initComponents()netbeans绝对是庞大的(大约500行代码),我无法编辑任何一行。如果我能提供更多有用的信息,请告诉我。

2 个答案:

答案 0 :(得分:4)

  

焦点会出现问题,如果有,我该怎样解决这个问题?

是的,重点可能存在问题。这就是为什么你不应该使用KeyListener。

Swing旨在与Key Bindings一起使用。那就是你创建一个行动来做你想要的。然后可以将此Action添加到您的JButton中。它也可以绑定到KeyStroke。所以你有可靠的可重用代码。

阅读How to Use Key Bindings上的Swing教程以获取更多信息。键绑定没有您目前的焦点问题。

答案 1 :(得分:1)

我不确定我是否完全理解你的问题,而且一些代码会有所帮助,但我会采取一些措施,因为这听起来像我以前经常遇到的问题。

听起来,您的按键被无法识别的原因是焦点在于其中一个按钮。如果您将键盘键添加到按钮,那么您应该没有任何问题。 在netbeans中,您可以非常轻松地在设计屏幕中添加keylisteners。 这是一张图片,向您展示如何将keyPressed侦听器添加到jPanel中的按钮。

enter image description here

private void jButton1KeyPressed(java.awt.event.KeyEvent evt) {                                    
    //Check which key is pressed
    //do whatever you need to do with the keypressed information
}       

能够自己写出听众是很好的,但如果你只是在学习,那么获得尽可能多的帮助也是很好的。 这可能不是最佳解决方案,因为您必须为每个按钮添加侦听器。