2012-06-19 4 views
4

У меня есть приложение Java, которое использует Java3D и JPopupMenus, заполненные JMenuItems. Все работает нормально, когда работает как обычное приложение - JPopupMenus и все остальное ведут себя так, как ожидалось. Однако, когда я делаю апплет из приложения, JPopupMenu, всплывающий полностью поверх Canvas3D, не действует так, как ожидалось. JPopupMenu ведет себя следующим образом:JPopupMenu в Java3d апплет не получает ввода мыши или клавиатуры

  1. пункты меню не подсвечиваются, как мышь движется над ними
  2. клавиши со стрелками, не могут быть использованы для перемещения по пунктам меню
  3. При нажатии на кнопку на верхнем уровне JMenuItem завершает действие и выдвигает на первый план пункт, но не выбрасывайте JPopupMenu, как это имеет место в регулярном применении
  4. Щелкнув на JMenuItem верхнего уровня, contatins подменю не делает ничего
  5. Щелчок за пределами JPopupMenu не располагает JPopupMenu, как и в re горловой применение
  6. С JPopupMenu отображается, открывая JPopupMenu на верхней части поворотной части моей программы позволяет регулярное и ожидаемое поведение JPopupMenu над Canvas3D, но точка 5 еще применяется

Некоторые больше информации:

  • JPopupMenu отображается JPopupMenu.show() по отношению к JPanel проведения Canvas3D
  • Я зову JPopupMenu.setDefaultLightWeightPopupEnabled (ложь) до создания любого JPopupMenus, но эта линия не кажется, м ake разница.
  • Я думал, что это могло бы быть проблемой внимания, но JPopupMenu.requestFocusInWindow() не работает

Так что мой вопрос: что является причиной поведения будет отличаться между приложением и апплетом, и как я могу сделать JPopupMenu в апплетной функции так же, как в приложении?

ответ

5

Вы должны изменить легкий JPopup супертяжелом трудно говорить что-то еще, не отправляя свой SSCCE

+0

JPopupMenu.setDefaultLightWeightPopupEnabled (ложь) должен сделать все JPopupMenus созданным после этого вызова в супертяжелом весе. Кроме того, я буду работать над SSCCE, но для реализации базовой реализации требуется много кода, и я чувствую, что это, вероятно, больше вопрос концепции, поскольку приложение для настольных ПК отлично работает, и только апплет распадается , –

+1

@ maher.cs AFAIK все хорошие обходные пути для CAD/CAM, 3D и т. Д. Основаны на AWT, возможно, вам нужно использовать AWT Popup с Swing JMenuItem или ei, смешивая тяжеловесный контейнер с легкими JComponents, можете ли вы проверить это с помощью GlassPane (установите для BorderLayout и поставьте туда непаковую JLabel с некоторой прозрачностью фона и Aplpha), если будет GlassPane позади, тогда вам нужно использовать всплывающие контейнеры AWT без исключений – mKorbel

+0

Я сейчас тестирую это тестирование, но не буду JPopupMenu не вообще-то, если он был легким? Canvas3D - супертяжелый вес, поэтому я бы не ожидал увидеть JPopupMenu вообще, согласно http://java.sun.com/products/jfc/tsc/articles/mixing/. –

0

Я решил, установив заклинателя на JPopMenu и сделать его тяжеловес

final JPopupMenu popup = new JPopupMenu(); 
popup.setLightWeightPopupEnabled(false); 
popup.setInvoker(myJFrame); 

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

  • Нет связанных вопросов^_^