在基于挥杆的UI中,我有一个JMenuBar,其中包含一系列JMenu和JMenuItem对象。菜单项对象之一也恰好是JCheckBoxMenuItem。
现在,尽管用户可以单击此JCheckBoxMenuItem来切换应用程序级别设置的状态,但用户(在我的应用程序中)还可以访问命令行API来更改应用程序设置。此命令行API的详细信息无关。
我的问题是:当用户通过命令行API并切换设置的状态(静态属性/适用于我的应用程序所有打开实例的设置)时,我想更新“选中/未选中”属性在JCheckBoxMenuItem上。为此,我可以:
存储对checkboxmenuitem的引用。
遍历JMenu容器层次结构以找到checkboxmenuitem。
我不想使用方法1,因为在将来,如果我有更多这些复选框方法,那么我将不得不继续引用每个方法。
方法2似乎很麻烦,因为我需要这样做:
Component[] childComponents = menu.getComponents();
for(Component c:childComponents)
{
if(c.getName().equals("nameOfTheCheckBoxMenuItem"))
{
componentFound = c;
}
}
有没有更好/更有效的方法来在组件层次结构中查找组件?通常,有没有更好的方法来解决此问题(当我的应用程序中的属性值更改时更改jcheckboxmenuitem的状态),例如使用PropertyChangeListener(尽管我的理解是,这些仅适用于“ beans”) 。
最佳答案
1)我建议使用CardLayout来获得针对multi_JPanel应用程序的最佳,最简单的解决方法
2)那么你可以实现
添加Action / ActionListener
ActionListener al = new ActionListener() {
public void actionPerformed(ActionEvent ae) {
if (myCheckBox.isSelected()) {
// something
} else {
// something
}
}
};
添加ItemListener
ItemListener itemListener = new ItemListener() {
public void itemStateChanged(ItemEvent itemEvent) {
if (Whatever) {
// something
}
}
};