4

JMenuItemsで満たされたJava3DとJPopupMenusを使用するJavaアプリケーションがあります。通常のアプリケーションとして実行すると、すべてが正常に機能します。JPopupMenusおよびその他すべてが期待どおりに動作します。ただし、アプリケーションからアプレットを作成すると、Canvas3D上に完全にポップアップするJPopupMenuが期待どおりに機能しません。JPopupMenuは次のように動作します。

  1. マウスがメニュー項目の上を移動しても、メニュー項目は強調表示されません
  2. 矢印キーを使用してメニュー項目間を移動することはできません
  3. トップレベルのJMenuItemをクリックすると、アクションが完了してアイテムが強調表示されますが、通常のアプリケーションの場合のようにJPopupMenuは破棄されません。
  4. サブメニューを含むトップレベルのJMenuItemをクリックしても、何も起こりません。
  5. JPopupMenuの外側をクリックしても、通常のアプリケーションのようにJPopupMenuは破棄されません。
  6. JPopupMenuが表示されている状態で、プログラムのスイング部分の上でJPopupMenuを開くと、Canvas3D上でJPopupMenuの通常の予想される動作が可能になりますが、ポイント5は引き続き適用されます。

いくつかの詳細情報:

  • JPopupMenuは、Canvas3Dを保持しているJPanelに関連してJPopupMenu.show()で表示されます。
  • JPopupMenusを作成する前にJPopupMenu.setDefaultLightWeightPopupEnabled(false)を呼び出していますが、この行は違いがないようです。
  • これがフォーカスの問題である可能性があると思いましたが、JPopupMenu.requestFocusInWindow()が機能しません

だから私の質問は、アプリケーションとアプレットの間で動作が異なる原因は何ですか?アプレットのJPopupMenuをアプリケーションの場合と同じように機能させるにはどうすればよいですか?

4

2 に答える 2

5

SSCCEを投稿せずに、軽量のJPopupを他のことを話すのが難しいヘビー級に変更する必要があります

于 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 に答える