2

現在のWinwdowsシステムメニューに項目(アプリケーションの「概要」)を追加できるかどうかを探していますJFrame

その回答で示唆されているように、JNI /JNAとWindowsAPIを介してメニューを微調整できる可能性があることはわかっていますがGetSystemMenu()、プレーンなバニラJava/Swingで可能かどうかを調べています。

私はそれがそのフォーラムスレッドで可能であるべきだと言っている何かを見つけました:

JFrameを作成する前にこれ

JFrame.setDefaultLookAndFeelDecorated(true);

次に、フレームに何かを追加する前に、フレームのコンポーネントを繰り返し、JMenuを探します。見つかったら、「about」menuItemを追加します

テストしたばかりで、正常に動作します。

残念ながら、sscce全体が提供されておらず、コードでそれを機能させることができませんでした。コンポーネントを追加する前にウィンドウを作成した直後にブレークポイントを設定すると、何も表示されませんJMenu。最初のレベル(JRootPane)でも、連続して埋め込まれたコンポーネント(JPanelJLayeredPane)でもありません。

重要な場合は、WinXPとWin7でJava 6/7を扱っており、ウィンドウはとして作成されnew JFrame("some title")、ネイティブのルックアンドフィールを使用していますUIManager.getSystemLookAndFeelClassName()

4

1 に答える 1

3

クロスプラットフォームのルックアンドフィールを使用する場合、JMenuコンポーネントは存在します。コンポーネントの階層は次のとおりです。

class Test
  class javax.swing.JRootPane
    class javax.swing.JPanel
    class javax.swing.JLayeredPane
      class javax.swing.JPanel
      class javax.swing.plaf.metal.MetalTitlePane
        class javax.swing.plaf.metal.MetalTitlePane$SystemMenuBar
          class javax.swing.JMenu
        class javax.swing.JButton
        class javax.swing.JButton
        class javax.swing.JButton

残念ながら、Windowsのルックアンドフィールを使用する場合、Javaはタイトルバーをまったく認識しません。おそらく、JNAまたは別のlafを使用して立ち往生しています。

于 2012-10-10T09:46:14.133 に答える