用于多个JButton实例的ActionListener

Cha*_*den 2 java swing awt event-handling actionlistener

在以下代码中添加ActionListener两个时遇到问题JButtons.

我点击这两个按钮(b1,b2)时打印每个1和2

但我只能打印1或2.

你能帮我解决一下这个问题吗?

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

class CCCc extends JFrame implements ActionListener{
    JButton b1,b2;
    JTextField f1;

CCCc(){
    setSize(500,200);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLocationRelativeTo(null);
    setResizable(false);
    f1=new JTextField();
    f1.setHorizontalAlignment(JTextField.RIGHT);
    add("North",f1);
    JPanel p1=new JPanel(new GridLayout(1,2));
    add(p1);

    b1=new JButton("1");    
    b1.addActionListener(this); 
    b2=new JButton("2");
    b2.addActionListener(this);
    p1.add(b1);
    p1.add(b2);

    setVisible(true);
}
public void actionPerformed(ActionEvent evt){
    String s=f1.getText();
    f1.setText(s+"1");
}
}
Run Code Online (Sandbox Code Playgroud)

Tom*_*ine 5

将类(例如JFrame和)子类化为Thread不必要的子类是一个坏主意.不恰当地实现接口也是一个坏主意.(第三,尝试查看source事件并且command也很讨厌是个坏主意)

我建议为监听器切换到匿名内部类.您会注意到两个按钮都有共同的代码,因此可以将其考虑到只需要一个内部类的方法中.保持"1"或"2"的变量通常通过final包含匿名内部类的方法中的局部字段来引用.但是,您可以使用非匿名类,并以通常方式访问字段.