-1

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

我将我的类设置为实现 KeyListener 并插入 KeyPressed、-Typed 和 -Released 方法;但是我从那里卡住了。我不确定如何让我的按钮真正监听 KeyPressed 事件,当它听到事件时 - 激活按钮。此外,我的按钮由它们的编号命名(例如,零按钮被命名为零,一个按钮被命名为一,等等)。

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

我可以在这里得到一些帮助吗?我是 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 行代码),我无法对其进行任何编辑。如果我能提供更多有用的信息,请告诉我。

4

2 回答 2

4

是否存在焦点问题,如果是,我该如何解决这个问题?

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

Swing 被设计为与键绑定一起使用。那就是您创建一个执行您想要的操作的操作。然后可以将此 Action 添加到您的 JButton。它也可以绑定到 KeyStroke。所以你有很好的可重用代码。

阅读有关如何使用键绑定的 Swing 教程以获取更多信息。键绑定没有您当前的焦点问题。

于 2013-06-02T03:34:45.407 回答
1

我不确定我是否完全理解您的问题,并且一些代码会有所帮助,但我会尝试一下,因为这听起来像是我曾经遇到过很多的问题。

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

在此处输入图像描述

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

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

于 2013-06-02T03:16:30.970 回答