1

我有一个 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,并将此复选框添加到第二个框架,则对象源不再起作用。是否需要进行一些其他定义才能让对象源读取任何打开框架的复选框名称?

4

1 回答 1

2

首先,您不能将一个组件添加到多个父级;我不确定那是你的问题。

您称为复选框的“名称”的东西不是复选框的属性,而是指向复选框的变量的属性。区别很重要,因为可能有很多这样的变量。该复选框对指向它的变量一无所知。

鉴于此,我们如何解决问题?您可以设置复选框的“动作命令”,然后检查:

 NewCB.setActionCommand("Fred");
 // ...
 if ("Fred".equals(((JCheckBox) source).getActionCommand())))
     // ...
于 2012-04-24T17:21:26.120 回答