我在一组 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 生成的。删除那里的操作,您的代码应该可以工作。
<小时/>编辑:
- 删除 IDE 中的操作
- 删除
tCalculator
的构造函数,并将代码放入JFrame1
的构造函数中(在initComponents
下面。
...
initComponents();
ActionListener actionListener = new tCalculator();
btn1.addActionListener(actionListener);
btn2.addActionListener(actionListener);
....
这些步骤可确保您的监听器在每个按钮上只注册一次。
顺便说一句:
tCalculator
扩展JFrame
没有意义。删除它。- 类名称以大写字母开头 (
TCalculator
)。更好的名称可能是ButtonActionListener
或类似的名称。
关于java - 对一组 jButton 实现 ActionListener 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6490128/