Почему setJMenuBar () не вызывает ContainerEvent? - PullRequest
1 голос
/ 01 марта 2011

Есть обходные пути?

myContainer.getContentPane().addContainerListener(new ContainerListener(){
    @Override public void componentAdded(ContainerEvent e) {
        System.out.println(e.getChild().getClass().getName().toString());
}});
myContainer.add(new JPanel());
myContainer.setJMenuBar(new JMenuBar());

1 Ответ

1 голос
/ 01 марта 2011

JMenuBar не является частью панели содержимого.

См. Раздел из учебника Swing по Использование контейнеров верхнего уровня для получения информации о структуре фрейма и его компонентах.

Фактический код в методе setJMenuBar ():

getRootPane().setMenuBar(menubar);

Поэтому я бы предположил, что ContainerListener необходимо добавить в корневую панель.

Редактировать:

Из учебной ссылки видно, что структура фрейма выглядит следующим образом:

  • корневая панель
    • многослойная панель
      • строка меню
      • панель содержимого

из кода, который я разместил, похоже, что строка меню добавляется в корневую панель, поэтому я предложил добавить слушатель контейнерав корневую панель.Однако кажется, что вам нужно добавить ContainerListener на многоуровневую панель:

getLayeredPane().addContainerListener(new ContainerAdapter()...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...