You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java Swing循环创建JButton设置唯一ID及点击切换背景色实现问题

实现方案

最优实现思路(无需依赖ID属性,性能更高)

你不需要通过ID查找按钮,只需要新增一个成员变量记录当前处于选中状态的按钮即可,逻辑如下:

  • 新增JButton类型的成员变量,存储当前被选中的黄色背景按钮
  • 每次点击新按钮时,先将之前记录的选中按钮背景改为红色
  • 将当前点击的按钮背景改为黄色,再更新成员变量为当前点击的按钮即可

修改后的完整代码如下:

package Classes;

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class testbtn {
    public JFrame frame = new JFrame();
    public int copcounter = 5;
    // 新增成员变量记录当前选中的按钮
    private JButton currentSelectedBtn;

    public testbtn() {
        JPanel jdb = new JPanel();
        jdb.setLayout(new FlowLayout());

        for (int x = 1; x <= copcounter; x++) {
            JButton btn = new JButton();
            btn.setText(String.valueOf(x));
            if (x == 1) {
                btn.setBackground(Color.yellow);
                // 初始化时默认第一个按钮为选中状态
                currentSelectedBtn = btn;
            } else {
                btn.setBackground(Color.red);
            }
            btn.putClientProperty("id", x);
            btn.addActionListener((ActionEvent e) -> {
                // 把之前选中的按钮改回红色
                currentSelectedBtn.setBackground(Color.RED);
                // 获取当前点击的按钮
                JButton clickBtn = (JButton) e.getSource();
                // 当前点击按钮改为黄色
                clickBtn.setBackground(Color.YELLOW);
                // 更新选中状态记录
                currentSelectedBtn = clickBtn;
                // 如需获取当前按钮ID可使用下方代码
                int btnId = (int) clickBtn.getClientProperty("id");
                System.out.println("当前点击按钮ID:" + btnId);
            });
            jdb.add(btn);
        }
        frame.add(jdb);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new testbtn());
    }
}

基于ID的实现方案(可选)

如果你确实需要使用自定义ID属性实现,可以在点击事件中遍历jdb面板中的所有组件,判断为JButton类型后对比ID,将非当前点击ID的按钮全部改为红色即可,该方案在按钮数量较多时性能略低于前一种方案。

内容的提问来源于stack exchange,提问作者Adeeb Mark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 09:45:11