我将JCheckBox定义为:
JCheckBox NewCB = new JCheckbox();
NewCB.setSelected(false);
NewCB.setMnemonic(KeyEvent.VK_C);
NewCB.addItemListener(this);
此复选框正在使用ItemLisener:
public void itemStateChanged(ItemEvent e) {
Object source = e.getItemSelectable();
if(source == NewCB) {TEST = "SELECTED"; System.out.println(TEST);}
}
程序启动时启动JFrame。如果我将这个CheckBox添加到框架中,它可以正常工作。如果我打开第二个JFrame,并将此复选框添加到第二帧,并且对象源不再有效。我需要做一些其他的定义来让Object源读取任何打开帧的复选框名称吗?
答案 0 :(得分:2)
首先,您不能将组件添加到多个父级;我不确定那是你的问题。
您正在调用复选框的“名称”不是复选框的属性,而是指向复选框的变量的属性。差异很重要,因为可能存在许多这样的变量。该复选框对指向它的变量一无所知。
鉴于此,我们如何解决问题?您可以设置复选框的“操作命令”,然后检查:
NewCB.setActionCommand("Fred");
// ...
if ("Fred".equals(((JCheckBox) source).getActionCommand())))
// ...