【发布时间】:2016-02-19 15:54:13
【问题描述】:
我的 GUI 中有两个组件,一个是 JButton,另一个是 JCheckBox。在 Button Click 事件中,将创建一个新的 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")
现在如果 JFrame2 JcheckBox 被点击,那么 MessageBox 将显示
JOptionPane.showMessageDialog(null,"JFrame2 Mute 2 is clicked")
等等来管理 JCheckBoxes
我在谷歌上搜索了很多关于这个特定场景的信息,并在 stackoverflow 中进行了搜索,以查找之前提出的任何问题是否满足我的需求,但我没有发现任何有用的信息。
已经有一个关于stackoverflow的问题,下面提供了链接,但这不是gui基础。
【问题讨论】:
-
"..将创建一个新的 JFrame.." 见The Use of Multiple JFrames, Good/Bad Practice?
-
是的,不知何故,使用多个 JFrame 并不是一个好的做法,但在某些情况下它最适合您的应用程序。