У меня есть приложение, имеющее основной графический интерфейс с меню, и еще один полноэкранный фрейм, который делает некоторые части основного графического интерфейса отображаемыми в полноэкранном эксклюзивном режиме. Когда я нахожусь в полноэкранном режиме, я хотел бы связать выпадающее меню из строки меню как jpopupmenu.Java/Swing/Mac OSX: преобразование JMenu в JPopupMenu с использованием ScreenMenuBar
Swing предоставляет функцию getPopupMenu() в JMenu. На первый взгляд эта функция работает нормально. Я могу навести курсор на элементы меню и перейти к подменю и просмотреть его. Наведение курсора на подменю подчеркивает подменю, зависающее над простым элементом меню (или радиобъектом или флажком) не подчеркивает элемент. Однако я не могу нажимать на элемент меню. Однако ярлыки клавиш действительно работают нормально. Проблема, по существу, такой же, как представлено на этом форуме (где эта проблема не решена, хотя):
http://www.java-forums.org/new-java/16463-jmenu-jpopupmenu.html
Если добавить JMenuItem после того, как строка меню инициализирован и используется/показано в главном GUI (таким образом, при переключении на полноэкранный кадр) элемент меню фактически доступен для клика. Этот элемент меню, в свою очередь, также можно щелкнуть в строке меню основного графического интерфейса. Выполнение getPopupMenu() непосредственно после инициализации jMenu ничего не меняет. Не использовать полноэкранный эксклюзивный режим также не изменяет ничего о проблеме.
Редактировать
Кажется, я оставил некоторые важные сведения: я тестирование приложения на Mac OSX и использование: System.setProperty("apple.laf.useScreenMenuBar", "true");
Для того, чтобы в строке меню использовать нативный меню. Если я отключу это, всплывающее меню работает так, как ожидалось. Это похоже на ошибку в API java mac? Это их способ преодолеть, это?
Прошу прощения за то, что я забыл об этом, я не знал, что это повлияет на что-либо (хотя это кажется очевидным).
Кажется, что это работает. Возможно, проблема в том, что рамка, используемая для отображения popupmenu, не совпадает с фреймом, в котором находится панель меню. Изменить: - После того, как я нажал правую кнопку мыши (и, таким образом, появится всплывающее меню), меню файла больше не появится, что выглядит странно. – user23127
+1 Хороший пример; аналогичный результат см. здесь [здесь] (http://stackoverflow.com/a/5129757/230513). – trashgod
Как правило, мой предпочтительный подход к этой проблеме состоял бы в том, чтобы иметь отдельное всплывающее меню.Я бы создал все пункты меню, используя классы «Action», что позволило мне централизовать общий код, позволяя при этом большую гибкость в дизайне. Например, вы можете создавать свои всплывающие окна из контекстной точки зрения. – MadProgrammer