2012-02-04 14 views
0

在我的基于swing的用户界面中,我有一个JMenuBar,其中包含一系列JMenu和JMenuItem对象。其中一个菜单项对象也恰好是JCheckBoxMenuItem。查找并从容器中检索组件

现在,虽然用户可以单击此JCheckBoxMenuItem以切换应用程序级别设置的状态,但用户(在我的应用程序中)也可以访问命令行API以更改应用程序设置。这个命令行API的细节是不相关的。

我的问题是:当用户通过命令行API并切换设置的状态(一个静态属性/设置适用于我的应用程序的所有打开的实例)时,我想更新“checked /未选中“属性的JCheckBoxMenuItem。为此,我可以:

  1. 存储对checkboxmenuitem的引用。
  2. 遍历JMenu容器层次结构以找到checkboxmenuitem。

我不想使用方法1,因为在将来如果我有更多的这些checkboxmenuitems,那么我将不得不坚持对每一个引用。

方法2似乎麻烦,因为我需要做的:

Component[] childComponents = menu.getComponents(); 
for(Component c:childComponents) 
{ 
    if(c.getName().equals("nameOfTheCheckBoxMenuItem")) 
    { 
     componentFound = c; 
    } 
} 

有没有找到一个组件层次结构中的成分更好/更有效的方式?有没有更好的方法来解决这个问题(一般来说,当应用程序中的属性值发生变化时,改变jcheckboxmenuitem的状态),使用PropertyChangeListener(尽管我的理解是这些只能在“bean”上工作) 。

+0

nameOfTheCheckBoxMenuItem这个字符串值是如何来到这个代码的东西,只是解释那部分?可能是,如果我在想的是这种情况,那么我想我可以解释做什么。 – 2012-02-04 16:51:54

+0

使用“setName”方法。例如: JCheckBoxMenuItem aCheckBoxItem = new JCheckBoxMenuItem(); aCheckBoxMenuItem.setName(“togglePropertyItem”); 现在,有没有一种有效的方式来找到JCheckBoxMenuItem,而无需坚持引用它。 – eternaln00b 2012-02-04 18:12:47

回答

1

1)我会建议使用CardLayout的最好和最简单的解决方法multi_JPanel应用

2),那么你可以imlements

  • 添加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 
         } 
        } 
    }; 
    
+0

我没有使用具有多个JPanel的应用程序。我的应用程序只是一个带有工具栏/菜单栏的JFrame和一个镶嵌在面板中的嵌入在滚动窗格中的表格。其次,ActionListener和ItemListener接口可以根据用户使用UI控件执行的操作,但是我的问题是,我应该如何访问组件并以编程方式更改其状态,而不必保留参考到那个UI控件。请让我知道是否需要进一步澄清。 – eternaln00b 2012-02-04 18:08:09

+0

@Siddhartha Shankar不知道你在做什么,因为对我来说(我的观点和经验)会是非实在不知道的ComponentHierarchy,如果你随机添加JComponent然后使用HierarchyListener, – mKorbel 2012-02-04 18:57:07