У меня есть приложение Java, которое использует Java3D и JPopupMenus, заполненные JMenuItems. Все работает нормально, когда работает как обычное приложение - JPopupMenus и все остальное ведут себя так, как ожидалось. Однако, когда я делаю апплет из приложения, JPopupMenu, всплывающий полностью поверх Canvas3D, не действует так, как ожидалось. JPopupMenu ведет себя следующим образом:JPopupMenu в Java3d апплет не получает ввода мыши или клавиатуры
- пункты меню не подсвечиваются, как мышь движется над ними
- клавиши со стрелками, не могут быть использованы для перемещения по пунктам меню
- При нажатии на кнопку на верхнем уровне JMenuItem завершает действие и выдвигает на первый план пункт, но не выбрасывайте JPopupMenu, как это имеет место в регулярном применении
- Щелкнув на JMenuItem верхнего уровня, contatins подменю не делает ничего
- Щелчок за пределами JPopupMenu не располагает JPopupMenu, как и в re горловой применение
- С JPopupMenu отображается, открывая JPopupMenu на верхней части поворотной части моей программы позволяет регулярное и ожидаемое поведение JPopupMenu над Canvas3D, но точка 5 еще применяется
Некоторые больше информации:
- JPopupMenu отображается JPopupMenu.show() по отношению к JPanel проведения Canvas3D
- Я зову JPopupMenu.setDefaultLightWeightPopupEnabled (ложь) до создания любого JPopupMenus, но эта линия не кажется, м ake разница.
- Я думал, что это могло бы быть проблемой внимания, но JPopupMenu.requestFocusInWindow() не работает
Так что мой вопрос: что является причиной поведения будет отличаться между приложением и апплетом, и как я могу сделать JPopupMenu в апплетной функции так же, как в приложении?
JPopupMenu.setDefaultLightWeightPopupEnabled (ложь) должен сделать все JPopupMenus созданным после этого вызова в супертяжелом весе. Кроме того, я буду работать над SSCCE, но для реализации базовой реализации требуется много кода, и я чувствую, что это, вероятно, больше вопрос концепции, поскольку приложение для настольных ПК отлично работает, и только апплет распадается , –
@ maher.cs AFAIK все хорошие обходные пути для CAD/CAM, 3D и т. Д. Основаны на AWT, возможно, вам нужно использовать AWT Popup с Swing JMenuItem или ei, смешивая тяжеловесный контейнер с легкими JComponents, можете ли вы проверить это с помощью GlassPane (установите для BorderLayout и поставьте туда непаковую JLabel с некоторой прозрачностью фона и Aplpha), если будет GlassPane позади, тогда вам нужно использовать всплывающие контейнеры AWT без исключений – mKorbel
Я сейчас тестирую это тестирование, но не буду JPopupMenu не вообще-то, если он был легким? Canvas3D - супертяжелый вес, поэтому я бы не ожидал увидеть JPopupMenu вообще, согласно http://java.sun.com/products/jfc/tsc/articles/mixing/. –