java - 多个 JButton 实例的 ActionListener

标签 java swing event-handling awt actionlistener

在以下代码中将 ActionListener 添加到两个 JButton 时遇到问题。

当我单击这两个按钮 (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");
}
}

最佳答案

不必要地子类化 JFrame 和 Thread 等类是一个坏主意。不恰本地实现接口(interface)也是一个坏主意。 (第三,尝试查看事件的是一个坏主意,而且命令也很糟糕)

我建议为监听器切换到匿名内部类。您会注意到两个按钮都有公共(public)代码,因此可以将其分解为仅需要单个内部类的方法。保存“1”或“2”的变量通常通过包含匿名内部类的方法中的final 本地字段来引用。但是,您可以使用非匿名类,并以通常的方式访问字段。

关于java - 多个 JButton 实例的 ActionListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14290061/

相关文章:

java - 在 UI 上进行数据验证时如何处理 "ignore/discard"Swing UI 事件?

java - Jtable swing获取行数据

c# - 如何在变量值更改时触发事件?

java - 为什么 JTable 总是触发 ListSelectionListener 两次?

callback - 是否可以向 ZeroMQ 添加事件处理以在接收/发送数据时进行操作?

java - 使用 JComboBox 设置 JLabel 的大小

java - JMH 找不到资源 :/META-INF/BenchmarkList

java - 我如何将 Jersey 与 TomEE/openEJB 集成

java - 如何动态更改 JFrame 内对 JPanel 的引用?

java - 将两个字符串合并到一个 ArrayList 中