Java3d applet中的JPopupMenu不接收鼠标或键盘输入

时间:2012-06-19 13:22:33

标签: java swing java-3d jpopupmenu

我有一个Java应用程序,它使用Java3D和JPopupMenus填充JMenuItems。当它作为常规应用程序运行时,一切正常--JPopupMenus和其他一切都按预期运行。但是,当我从应用程序中创建一个applet时,完全弹出Canvas3D的JPopupMenu没有按预期运行。 JPopupMenu的行为如下:

  1. 当鼠标移过菜单项时,菜单项不会突出显示
  2. 箭头键不能用于浏览菜单项
  3. 单击顶级JMenuItem完成操作并突出显示该项目,但它不像在常规应用程序中那样处理JPopupMenu
  4. 点击包含子菜单的顶级JMenuItem无效
  5. 点击JPopupMenu外部不像在常规应用程序中那样处理JPopupMenu
  6. 显示JPopupMenu后,在程序的swing部分顶部打开JPopupMenu可以使Canop3D上的JPopupMenu有规律和预期的行为,但第5点仍然适用
  7. 更多信息:

    • JPopupMenu显示JPopupMenu.show()与持有Canvas3D的JPanel相关
    • 我在创建任何JPopupMenus之前调用JPopupMenu.setDefaultLightWeightPopupEnabled(false),但这行似乎没有什么区别。
    • 我认为这可能是一个焦点问题,但JPopupMenu.requestFocusInWindow()不起作用

    所以我的问题是:导致应用程序和applet之间的行为不同的原因是什么,以及如何在applet函数中创建JPopupMenu,就像在应用程序中一样?

2 个答案:

答案 0 :(得分:5)

你必须将轻量级JPopup更改为重量级,而不必发布其他内容而不发布你的SSCCE

答案 1 :(得分:0)

我通过在JPopMenu上设置调用者并使其成为HeavyWeight

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