В моем пользовательском интерфейсе на основе свинга у меня есть 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») .