2012-02-04 5 views
0

В моем пользовательском интерфейсе на основе swing у меня есть JMenuBar, который содержит ряд объектов JMenu и JMenuItem. Одним из объектов меню также является JCheckBoxMenuItem.Поиск и извлечение компонента из его контейнера

Теперь, когда пользователь может щелкнуть по этому JCheckBoxMenuItem, чтобы переключить состояние уровня уровня приложения, пользователь (в моем приложении) также имеет доступ к API командной строки для изменения настройки приложения. Подробности этого API командной строки не имеют отношения к делу.

Мой вопрос заключается в следующем: когда пользователь проходит API-интерфейс командной строки и переключает состояние параметра (статическое свойство/параметр, применяемый ко всем открытым экземплярам моего приложения), я хотел бы обновить «checked»/unchecked "на 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 (хотя я понимаю, что эти работы работают только на «beans») ,

+0

Как это значение строки для nameOfTheCheckBoxMenuItem, подходит к этой вещи кода, просто объясните эту часть? Может быть, если то, что я думаю, так это то, что я могу объяснить, что делать. –

+0

с использованием метода setName. Например: JCheckBoxMenuItem aCheckBoxItem = новый JCheckBoxMenuItem(); aCheckBoxMenuItem.setName ("togglePropertyItem"); Теперь, есть эффективный способ найти JCheckBoxMenuItem, не дожидаясь ссылки на него. – eternaln00b

ответ

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

Я не работаю с приложением, имеющим несколько JPanels. Мое приложение - это просто JFrame с панелью инструментов/меню/и таблицей, встроенной в scrollpane, встроенной в панель, которая находится в кадре. Во-вторых, интерфейсы ActionListener и ItemListener подходят для выполнения действий, основанных на том, что пользователь делает с элементом управления пользовательского интерфейса, но мой вопрос заключается в том, как мне получить доступ к компоненту и изменить его состояние программно, не дожидаясь ссылки к этому контролю пользовательского интерфейса.Пожалуйста, дайте мне знать, нужны ли какие-либо дополнительные разъяснения. – eternaln00b

+0

@ Сиддхартха Шанкар не уверен, что вы делаете, потому что для меня (мой взгляд и опыт) было бы бессмысленно не знать ComponentHierarchy, если вы добавляете случайный JComponent, тогда используйте HierarchyListener, – mKorbel

Смежные вопросы