在我基于swing的UI中,我有一个JMenuBar,它包含一系列JMenu和JMenuItem对象。其中一个菜单项对象也恰好是JCheckBoxMenuItem。
现在,虽然用户可以单击此JCheckBoxMenuItem以切换应用程序级别设置的状态,但用户(在我的应用程序中)也可以访问命令行API以更改应用程序设置。此命令行API的详细信息不相关。
我的问题是:当用户通过命令行API并切换设置的状态(适用于我的应用程序的所有打开实例的静态属性/设置)时,我想更新“已检查/未选中“JCheckBoxMenuItem上的属性”。要做到这一点,我可以:
我不想使用方法1,因为在将来,如果我有更多这些复选框,那么我将不得不挂起对每个方法的引用。
方法2似乎很麻烦,因为我需要这样做:
Component[] childComponents = menu.getComponents();
for(Component c:childComponents)
{
if(c.getName().equals("nameOfTheCheckBoxMenuItem"))
{
componentFound = c;
}
}
是否有更好/更有效的方法在组件层次结构中查找组件?是否有更好的方法可以解决这个问题(在我的应用程序中属性的值发生变化时更改jcheckboxmenuitem的状态),使用一个PropertyChangeListener(虽然我的理解是这些只适用于“bean”)
答案 0 :(得分:1)
1)我建议使用CardLayout为multi_JPanel应用程序提供最好,最简单的解决方法
2)然后你就可以了。
添加Action / ActionListener
ActionListener al = new ActionListener() {
public void actionPerformed(ActionEvent ae) {
if (myCheckBox.isSelected()) {
// something
} else {
// something
}
}
};
ItemListener itemListener = new ItemListener() {
public void itemStateChanged(ItemEvent itemEvent) {
if (Whatever) {
// something
}
}
};