在我的基于swing的用户界面中,我有一个JMenuBar,其中包含一系列JMenu和JMenuItem对象。其中一个菜单项对象也恰好是JCheckBoxMenuItem。查找并从容器中检索组件
现在,虽然用户可以单击此JCheckBoxMenuItem以切换应用程序级别设置的状态,但用户(在我的应用程序中)也可以访问命令行API以更改应用程序设置。这个命令行API的细节是不相关的。
我的问题是:当用户通过命令行API并切换设置的状态(一个静态属性/设置适用于我的应用程序的所有打开的实例)时,我想更新“checked /未选中“属性的JCheckBoxMenuItem。为此,我可以:
- 存储对checkboxmenuitem的引用。
- 遍历JMenu容器层次结构以找到checkboxmenuitem。
我不想使用方法1,因为在将来如果我有更多的这些checkboxmenuitems,那么我将不得不坚持对每一个引用。
方法2似乎麻烦,因为我需要做的:
Component[] childComponents = menu.getComponents();
for(Component c:childComponents)
{
if(c.getName().equals("nameOfTheCheckBoxMenuItem"))
{
componentFound = c;
}
}
有没有找到一个组件层次结构中的成分更好/更有效的方式?有没有更好的方法来解决这个问题(一般来说,当应用程序中的属性值发生变化时,改变jcheckboxmenuitem的状态),使用PropertyChangeListener(尽管我的理解是这些只能在“bean”上工作) 。
nameOfTheCheckBoxMenuItem这个字符串值是如何来到这个代码的东西,只是解释那部分?可能是,如果我在想的是这种情况,那么我想我可以解释做什么。 – 2012-02-04 16:51:54
使用“setName”方法。例如: JCheckBoxMenuItem aCheckBoxItem = new JCheckBoxMenuItem(); aCheckBoxMenuItem.setName(“togglePropertyItem”); 现在,有没有一种有效的方式来找到JCheckBoxMenuItem,而无需坚持引用它。 – eternaln00b 2012-02-04 18:12:47