繁体   English   中英

java swing 获取或设置新 JButton 的唯一 ID,同时在 for 循环上创建它

[英]java swing get or set unique id for new JButton while create thim on for loop

我有创建JButton的 java swing Class

它正在工作但我需要的是当我按下一个JButton时让种子表明它是第 1 个ActionEvent中的代码是更改JButton的背景但我需要的是如果我按下另一个JButton我需要它的第一个go 回红颜色:

例子:

  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;
        
            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);
        
                    } else {
        
                        btn.setBackground(Color.red);
        
                    }
        
                    btn.putClientProperty("id", x);
        
                    btn.addActionListener((ActionEvent e) -> {
        
                        btn.setBackground(Color.yellow);
        
                        System.out.println(e.getID());
        
                    });
        
                    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 Runnable() {
                    public void run() {
                        new testbtn();
                    }
                });
            }
        }

此代码将显示如下形式:

在此处输入图像描述

当我按下JButton 4 时,output 变成这样:

在此处输入图像描述

但我需要它是这样的,所以另一个按钮会变成红色,但我按下的是我需要它变成黄色::

在此处输入图像描述

我知道我可以使用 id 但如何为他们获取 id? 或者是否有更好的方法?

不需要 id,只需将所有 JButtons 放入List<JButton>中,例如称为buttonList ,然后遍历按钮的 ActionListener 中的列表,将列表中所有按钮的背景变为红色,然后将当前按钮的背景黄色。

然后在使用它的代码中:

public void actionPerformed(ActionEvent e) {
    // iterate through the list
    for (JButton button : buttonList) {
        button.setBackground(Color.RED);
    }
    
    // then set *this* button's color yellow:
    ((JButton) e.getSource).setBackground(Color.YELLOW);
}

而已

或为您的代码...

public class TestBtn {
    public JFrame frame = new JFrame();
    public int copcounter = 5;
    private List<JButton> buttonList = new ArrayList<>();

    public TestBtn() {
        JPanel jdb = new JPanel();
        jdb.setLayout(new FlowLayout());
        for (int x = 1; x <= copcounter; x++) {
            JButton btn = new JButton();
            
            // add this
            buttonList.add(btn);
            
            btn.setText(String.valueOf(x));
            if (x == 1) {
                btn.setBackground(Color.yellow);
            } else {
                btn.setBackground(Color.red);
            }
            // btn.putClientProperty("id", x);
            btn.addActionListener((ActionEvent e) -> {
                // iterate through the list
                for (JButton button : buttonList) {
                    button.setBackground(Color.RED);
                }
    
                // then set *this* button's color yellow:
                ((JButton) e.getSource).setBackground(Color.YELLOW);
                
                // show button text
                System.out.println(e.getActionCommand());  
            });
            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 Runnable() {
            public void run() {
                new testbtn();
            }
        });
    }
}

此外,ActionEvent 的 actionCommand 字符串应该与按钮的文本匹配(有一些例外)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM