В моем пользовательском интерфейсе на основе свинга у меня есть JMenuBar, который содержит серию объектов JMenu и JMenuItem. Один из объектов пункта меню также является JCheckBoxMenuItem.
Теперь, когда пользователь может щелкнуть этот JCheckBoxMenuItem для переключения состояния настройки уровня приложения, пользователь (в моем приложении) также имеет доступ к API командной строки для изменения настройки приложения. Детали этого API командной строки не имеют значения.
У меня такой вопрос: когда пользователь проходит через API командной строки и переключает состояние настройки (статическое свойство / настройка, которая применяется ко всем открытым экземплярам моего приложения), я хотел бы обновить «флажок / unchecked "свойство в JCheckBoxMenuItem. Для этого я могу либо:
- Хранить ссылку на checkboxmenuitem.
- Пройдите по иерархии контейнеров JMenu, чтобы найти checkboxmenuitem.
Я не хочу использовать метод 1, потому что в будущем, если у меня будет больше этих флажков, мне придется придерживаться ссылки на каждый из них.
Метод 2 кажется громоздким, потому что мне нужно сделать:
Component[] childComponents = menu.getComponents();
for(Component c:childComponents)
{
if(c.getName().equals("nameOfTheCheckBoxMenuItem"))
{
componentFound = c;
}
}
Есть ли лучший / более эффективный способ найти компонент в иерархии компонентов? Может быть, есть лучший способ решить эту проблему в целом (изменение состояния jcheckboxmenuitem при изменении значения свойства в моем приложении), используя, скажем, PropertyChangeListener (хотя я понимаю, что они работают только на "бинах") .