Java 将ID分配给动态创建的JCheckbox

Java 将ID分配给动态创建的JCheckbox,java,swing,Java,Swing,我的GUI中有两个组件,一个是JButton,另一个是JCheckBox。在按钮点击事件中,将创建一个新的JFrame,具有相同的两个组件 所以我的问题是: 如何在动态创建的JFrame中为动态创建的JCheckBox分配唯一ID 这是我的密码 import javax.swing.*; import javax.swing.event.*; import java.awt.*; import java.awt.event.*; public cla

我的GUI中有两个组件,一个是JButton,另一个是JCheckBox。在按钮点击事件中,将创建一个新的JFrame,具有相同的两个组件

所以我的问题是:

如何在动态创建的JFrame中为动态创建的JCheckBox分配唯一ID

这是我的密码



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

    public class HandlingDynamicJCheckBoxes extends JFrame implements ActionListener{

        public JFrame frame;
        public Container container;
        public JPanel panel;
        public JCheckBox chkBox;
        public JButton createThreads;

        public HandlingDynamicJCheckBoxes(){

            init();    
        }

        public void init(){

            frame = new JFrame("Dynamic JCheckBoxes");
            container = frame.getContentPane();
            frame.setLayout(new FlowLayout());
            chkBox = new JCheckBox("Mute", true);
            createThreads = new JButton("Create Threads");
            panel = new JPanel();
            panel.setLayout(new BorderLayout());
            panel.add(chkBox,BorderLayout.CENTER);
            panel.add(createThreads,BorderLayout.SOUTH);
            container.add(panel);

            chkBox.addActionListener(this);
            createThreads.addActionListener(this);

            frame.setSize(300,300);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);

        }

        public static void main(String[] args){
            SwingUtilities.invokeLater(new Runnable(){

                @Override
                public void run() {

                    HandlingDynamicJCheckBoxes obj = new HandlingDynamicJCheckBoxes();

                }      
            });     
        }

        @Override
        public void actionPerformed(ActionEvent e) {

            if(e.getActionCommand() == "Create Threads"){

                Thread thread = new Thread(){

                    HandlingDynamicJCheckBoxes obj = new HandlingDynamicJCheckBoxes();

                };
                thread.start();

            }

            else if(e.getActionCommand() == "Mute"){

                JOptionPane.showMessageDialog(null, "Hello");

            }      
        }      
    }

现在,若单击JFrame1 JcheckBox,则会显示消息

 JOptionPane.showMessageDialog(null,"JFrame1 Mute 1 is clicked") 
 JOptionPane.showMessageDialog(null,"JFrame2 Mute 2 is clicked") 
现在,如果单击JFrame2 JcheckBox,则会显示MessageBox

 JOptionPane.showMessageDialog(null,"JFrame1 Mute 1 is clicked") 
 JOptionPane.showMessageDialog(null,"JFrame2 Mute 2 is clicked") 
等等来管理JCheckbox


我在谷歌上搜索了很多关于这个特殊场景的信息,也在stackoverflow中搜索,以发现之前提出的任何问题是否满足了我的需要,但我没有发现任何有用的东西

已经有一个关于stackoverflow的问题,下面提供了链接,但这不是gui基础


也许以下方法可以奏效:

// Add a 'global' variable within your frame
private static int last_generated_id = 0;

// Add a method that generates and returns a new unique ID
private static synchronized int createUniqueID()
{
    last_generated_id++;
    return (last_generated_id);
}

是的,成功了:)在我的程序中添加上述代码,只需在我的程序中修改一行代码
JOptionPane.showMessageDialog(null,“Mute”+createUniqueId())
”。将创建一个新的JFrame..”不知何故,使用多个JFrame不是一种好的做法,但在某些情况下,它最适合您的应用程序。