5

私はJavaSwingを学んでいて、フレームにmenuBarを追加しました。デフォルトでは、これはを呼び出す必要がありますjframe.getContentPane().add(child)。スクリプトを実行したとき、menuBarが表示されませんでした。しかし、それが理にかなっている場合、ボタンは一番上の「y=0」にありました。

それから私は自分の間違いに気づき、実際にメニューバーにメニューを入れなければなりませんでした。次に、menuBarが表示されました。それで私は考えました...「メニューバー」「コンテンツペイン」は実際には2つのパネルですか?それは私を混乱させています。それはパネルのように機能したからです。しかしgetContentPane()、JPanelオブジェクトではなくコンテナを返すので、混乱しています。

もしそうなら、それはフレームに直接ダンプされる唯一のものがJpanelオブジェクトだけであることを意味しますか?したがって、JButton、JLabelはフレーム内に直接ありません...つまり、jpanelは「ネスト」されているのでしょうか。私を混乱させているもう一つのこと。jpanelが物事の配置方法を制御できる場合、LayoutManagerは何のためにありますか?:Sありがとう、そして空が青い理由を尋ねる2歳の人のように答えてください、ha;)

4

4 に答える 4

10

いくつかのランダムな考え:

  • はい、JPanels やその他のコンポーネントはしばしば「入れ子」になっています。ここでは、Swing/AWT レイアウト マネージャーをしっかりと理解しておくことが不可欠です。
  • JFrame によって返される型getContentPane()は技術的にはコンテナーですが、JPanel (最終的にコンテナーから継承されます) でもあります。
  • Container から派生したものは何でも contentPane にできると思いますが、不透明になるように注意する必要があります。
于 2011-10-13T18:56:39.563 に答える
3

そのための方法があります

frame.setJMenuBar(menuBar);

今日の Java Swing GUI では、declareContentPaneは不要で、Java5 から、デフォルトでBorderLayoutを使用LayoutManager

then frame.add(myPanel); // と同じでframe.add(myPanel, BorderLayout.CENTER)、コンテナ全体を占有します

LayourManagers の使い方に関する基本的なこと

于 2011-10-13T18:57:23.967 に答える
1

getContentPane()常にContainerインスタンスを返します。JPanelただし、オブジェクトはContainerインスタンスであり、Swing フレームワークの他のクラスでもあることに注意してください。返されるインスタンスの実際のクラスは無関係です。Container(特定の contentPane を強制しない限り) のどの実装を contentPane として使用するかを制御できないため、ほとんどの場合、これは問題になりません。

JFrame、 など、JButton多くの GUI ウィジェットを に追加できますJLabel。ただし、それらは関連する contentPane に自動的に追加されます。

JPanelはオブジェクトの配置を処理しませんがLayoutManager、パネルに関連付けられている は処理します。独自のルール セットに基づいて自動的に (例: FlowLayout)、またはオブジェクトをコンテナーに追加するときに指定した制約を使用して (GridBagLayoutレイアウト マネージャーが良い例です)。通常、LayoutManager の JavaDoc には、それらを使い始めるのに十分な情報が含まれています。

はい、ネストされたパネルを持つことができます。AContainerには他のContainerインスタンスを含めることができます。複雑なソリューションのように見えますが、GUI の表示方法を正確に制御できます。どちらLayoutManagerを使用しているか、ユーザー インターフェイスで満たす必要があるニーズ、開発者としての好みや習慣に応じて、ネストされたパネルの数を増減する必要がある場合があります。

于 2011-10-13T19:09:46.497 に答える
0

については、このAPI ドキュメントを参照する必要がありますJComponent

継承階層を見ると、JComponent が Component であるようにJComponent拡張されていることがわかります。Component

また、Direct Known Subclassesの下に、およびJComponentを含むを拡張するすべてのクラスのリストが表示されます。JMenuBarJPanel

したがって、JMenuBarとは(または)JPanelのさらに 2 つの特殊化されたバージョンです。JComponentContainer

于 2011-10-13T19:13:08.447 に答える