java - 对一组 jButton 实现 ActionListener 时出现问题

标签 java swing jbutton actionlistener

我在一组 10 个 jButton 上实现 ActionListener 时遇到问题。每个按钮的文本属性设置为 0 - 9 之间的数字。因此 jButton1 将其文本属性设置为 1,JButton2 将其文本设置为 2,...., .... 然后 jButton9 将其文本设置为 9。当我单击其中任何一个按钮时,我想将其文本属性的值附加到 JTextField。

我遇到的问题是每次我单击一个按钮时,其文本属性的值都会打印两次,有时三次,有时甚至四次,它只是随机发生。

例如,如果我单击带有文本 4 的按钮一次,我可以在 JTextField 中打印 44,如果我再次单击 7,我最终可以得到 4477 甚至 447777。下面是我的代码

 public class tCalculator extends JFrame implements ActionListener{

    public tCalculator(){
        btn1.addActionListener(this);
        btn2.addActionListener(this);
        btn3.addActionListener(this);
        btn4.addActionListener(this);
        btn5.addActionListener(this);
        btn6.addActionListener(this);
        btn7.addActionListener(this);
        btn8.addActionListener(this);
        btn9.addActionListener(this);
        btnZero.addActionListener(this);
          } 

    public void actionPerformed(ActionEvent evt) {

        String x = txtArea.getText();
        String k = evt.getActionCommand();
        String a = x + k ;
        txtArea.setText(a);

    }}

private void btn1ActionPerformed(java.awt.event.ActionEvent evt) {                                     
        ActionListener actionListener = new tCalculator();
        btn1.addActionListener(actionListener);

    }   

最佳答案

您的方法btn1ActionPerformed 添加了另一个ActionListener。我们看不到它在哪里被调用,但这可以解释您的问题。每当您单击该按钮时,您就会多一个 Listener,该监听器将在下一次单击时执行。

看起来这段代码是由 IDE 生成的。删除那里的操作,您的代码应该可以工作。

<小时/>

编辑:

  1. 删除 IDE 中的操作
  2. 删除tCalculator的构造函数,并将代码放入JFrame1的构造函数中(在initComponents下面。

...
initComponents();
ActionListener actionListener = new tCalculator();
btn1.addActionListener(actionListener);
btn2.addActionListener(actionListener);
....

这些步骤可确保您的监听器在每个按钮上只注册一次。

顺便说一句:

  1. tCalculator 扩展 JFrame 没有意义。删除它。
  2. 类名称以大写字母开头 (TCalculator)。更好的名称可能是 ButtonActionListener 或类似的名称。

关于java - 对一组 jButton 实现 ActionListener 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6490128/

相关文章:

Java滚动条

java - JButton 不起作用?

java - Swing 屏幕键盘

java - 具有可切换组标题的 JList

java - 如何在从 JComboBox 创建的按钮上放置标签?

java - 从 ActionPerformed 中的另一个类导入代码

java - 是否可以将泛型类型扩展到 Java 中的多个类?

java - 增加tomcat 7中的并发连接数

java - 从 Android 图库加载位图图像时出现 FileNotFound 异常

java - 如何增加java中动态创建的文本的大小