4

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

  1. 当鼠标移到菜单项上时,菜单项不会突出显示
  2. 箭头键不能用于在菜单项之间移动
  3. 单击顶级 JMenuItem 完成操作并突出显示该项目,但它不会像在常规应用程序中那样处理 JPopupMenu
  4. 单击包含子菜单的顶级 JMenuItem 不会执行任何操作
  5. 在 JPopupMenu 外部单击不会像在常规应用程序中那样处理 JPopupMenu
  6. 显示 JPopupMenu 后,在我的程序的摆动部分顶部打开 JPopupMenu 可以使 JPopupMenu 在 Canvas3D 上的常规和预期行为,但第 5 点仍然适用

更多信息:

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

所以我的问题是:是什么导致应用程序和小程序之间的行为不同,以及如何使小程序中的 JPopupMenu 像在应用程序中一样运行?

4

2 回答 2

5

您必须将轻量级 JPopup 更改为重量级很难在不发布您的 SSCCE 的情况下谈论其他内容

于 2012-06-19T14:21:46.587 回答
0

我通过在 JPopMenu 上设置调用程序并将其设为 HeavyWeight 来解决

final JPopupMenu popup = new JPopupMenu();
popup.setLightWeightPopupEnabled(false);
popup.setInvoker(myJFrame);
于 2013-06-08T18:12:22.687 回答