Java 将ActionListener实现到一组JButton时出现问题
我在一组10个JButton上实现ActionListener时遇到问题。每个按钮的文本属性都设置为数字,从0到9。所以jButton1将其文本属性设置为1,JButton2将其文本设置为2。。。。然后jButton9将其文本设置为9。当我单击这些按钮时,我想将其文本属性的值附加到JTextField 我遇到的问题是,每当我点击一个按钮,它的文本属性值就会被打印两次,有时是三次,有时甚至四次,这只是随机发生的 例如,如果我单击一次文本为4的按钮,我可以在JTextField中打印44,如果我再次单击7,我可以得到4477,甚至447777。下面是我的代码Java 将ActionListener实现到一组JButton时出现问题,java,swing,jbutton,actionlistener,Java,Swing,Jbutton,Actionlistener,我在一组10个JButton上实现ActionListener时遇到问题。每个按钮的文本属性都设置为数字,从0到9。所以jButton1将其文本属性设置为1,JButton2将其文本设置为2。。。。然后jButton9将其文本设置为9。当我单击这些按钮时,我想将其文本属性的值附加到JTextField 我遇到的问题是,每当我点击一个按钮,它的文本属性值就会被打印两次,有时是三次,有时甚至四次,这只是随机发生的 例如,如果我单击一次文本为4的按钮,我可以在JTextField中打印44,如果我再次
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
。我们看不出它的名称,但这可以解释您的问题。无论何时单击该按钮,都会有一个以上的侦听器
,该侦听器将在下次单击时执行
看起来这段代码是由IDE生成的。删除那个动作,你的代码就可以工作了
编辑:
tCalculator
的构造函数,并将代码放入JFrame1
的构造函数中(以下initComponents
)tCalculator
扩展JFrame
是没有意义的。删除它TCalculator
)开头。更好的名称可以是ButtonActionListener
或类似的名称您的方法
btn1ActionPerformed
添加了另一个ActionListener
。我们看不到调用它的位置,但这可以解释您的问题。每当您单击按钮时,您就会有一个侦听器
,该侦听器将在下次单击时执行
看起来这段代码是由IDE生成的。如果在那里删除该操作,代码就会正常工作
编辑:
tCalculator
的构造函数,并将代码放入JFrame1
的构造函数中(以下initComponents
)tCalculator
扩展JFrame
是没有意义的。删除它TCalculator
)开头。更好的名称可以是ButtonActionListener
或类似的名称我不知道btn1ActionPerformed在哪里被调用。@Giann:看起来像是由IDE生成的
btn1ActionPerformed
,所以我假设它是在一些生成的Listener
中被调用的,我们在这里看不到。Peter,你是在暗示btn1ActionPerformed不是必需的吗?因为如果我在btn1ActionPerformed中注释掉代码,那么就没有了无论单击哪个按钮,JTextField中都会显示内容!!如果为True,则btn1ActionPerformed由IDE@Name.IsNullOrEmpty:看起来我们需要查看您的完整代码。如果tCalculator
是您正在显示的JFrame
,则会调用构造函数并添加侦听器。您描述的问题be now的意思是,以前没有调用构造函数,而只在btn1ActionPerformed
中调用。这就是为什么在注释它时它不起作用。我看不出btn1ActionPerformed在哪里被调用。@Giann:看起来btn1ActionPerformed
是由IDE生成的,所以我假设它是在某个生成的列表中被调用的r
我们在这里看不到。Peter,你是在暗示btn1ActionPerformed不是必需的吗?因为如果我在btn1ActionPerformed中注释掉代码,那么无论我单击哪个按钮,JTextField中都不会显示任何内容!!如果是,btn1ActionPerformed是由IDE@Name.IsNullOrEmpty:看起来我们需要查看您的完整代码。如果tCalculator
是您正在显示的JFrame
,则会调用构造函数并添加侦听器。您现在描述的问题意味着,以前没有调用构造函数,而只在btn1ActionPerformed
中调用。这就是为什么在注释它时它不起作用。请立即寻求更好的帮助r、 发布一个。请尝试用几个按钮来重现问题,而不是10.BTW-这些代码片段读起来完全是胡说八道。按钮在哪里实例化?为什么actionPerformed()
创建一个完整的新GUI?在这样做之后,为什么新的(不可见的)GUI添加到btn1(仅限)中作为一个监听器?即使在这些代码片段中也显示出误解的程度,这表明您目前应该编写比GUI更简单的代码。“…这是完整的代码。”F:\..\JFrame1.java:63:表达式的非法开始公共类tCalculator extensed JFrame实现ActionListener{^1 error
Give
...
initComponents();
ActionListener actionListener = new tCalculator();
btn1.addActionListener(actionListener);
btn2.addActionListener(actionListener);
....
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();
}
}