[英]Problem implementing ActionListener to a group of jButtons
我在一组10个jButton上实现ActionListener时遇到问题。 每个按钮的text属性设置为0到9之间的一个数字。因此jButton1的text属性设置为1,JButton2的text设置为2,....,....然后jButton9的文本设置为1。设置为9。当我单击这些按钮中的任何一个时,我想将其text属性的值附加到JTextField。
问题是,每次我单击按钮时,其text属性的值都会打印两次,有时甚至是三次,甚至是三次,它只是随机发生。
例如,如果我单击一次带有文本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
,该Listener
在下次单击时执行。
看起来这段代码是由IDE生成的。 在那里删除该操作,您的代码应该可以工作。
编辑:
tCalculator
的构造tCalculator
,并将代码放入JFrame1
的构造函数中( initComponents
下方)。 ...
initComponents();
ActionListener actionListener = new tCalculator();
btn1.addActionListener(actionListener);
btn2.addActionListener(actionListener);
....
这些步骤可确保每个按钮仅一次注册您的监听器。
顺便说一句:
tCalculator
扩展JFrame
没有任何意义。 删除那个。 TCalculator
)开头。 更好的名称可以是ButtonActionListener
或类似的名称。 这是因为您刚刚使用this和on方法将动作侦听器分配给了按钮,所以您再次辅助动作侦听器,它是tCalculator类的实例,因此,当您按下按钮时,就会调用船boat动作侦听器,并显示2个结果,只需删除btn1ActionPerformed方法,它将可以正常工作。 现在尝试下面的代码................................
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
public class Tcalculator extends JFrame implements ActionListener{
private JButton btn1,btn2,btn3,btn4,btn5,btn6,btn7,btn8,btn9,btnZero;
private JTextField txtArea;
public Tcalculator(){
btn1 = new JButton("1");
btn2 = new JButton("2");
btn3 = new JButton("3");
btn4 = new JButton("4");
btn5 = new JButton("5");
btn6 = new JButton("6");
btn7 = new JButton("7");
btn8 = new JButton("8");
btn9 = new JButton("9");
btnZero = new JButton("0");
txtArea = new JTextField(15);
init();
}
//performed all gui operations
public void init(){
getContentPane().setLayout(new FlowLayout());
setSize(200, 200);
add(txtArea);
add(btn1);add(btn2);
add(btn3);add(btn4);
add(btn5);add(btn6);
add(btn7);add(btn8);
add(btn9);add(btnZero);
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);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
// i am using this your made function nothing changed
public void actionPerformed(ActionEvent evt) {
String x = txtArea.getText();
String k = evt.getActionCommand();
String a = x + k ;
txtArea.setText(a);
}
public static void main(String args[]){
new Tcalculator();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.