在我的基於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