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