14

JFrame フレームを埋める 3 つの方法を見つけました = new JFrame("...") createContentPanel は JPanel を返し、createToolBar は ToolBar を返します。

frame.add(this.createToolBar(), BorderLayout.PAGE_START); //this works and puts the ToolBar above and the ContentPanel under it<br>
frame.add(this.createContentPanel(), BorderLayout.CENTER);

frame.setContentPane(this.createContentPanel()); //this lets the JToolBar hover over the ContentPanel
frame.getContentPane().add(this.createToolBar()); 

frame.getContentPane().add(this.createContentPanel()); //this only puts the last one into the JFrame
frame.getContentPane().add(this.createToolBar());

そして今、単純な frame.add(...) を使用してフレームを埋めることができるのに、なぜ getContentPane()/setContentPane() メソッドを使用する必要があるのか​​ 疑問に思っています。

4

4 に答える 4

9

JFrame#add(...)両方とも本質的に同じコードを呼び出すため ( vs. )どちらを使用するかは問題ではありませんがJFrame#getContentPane().add(...)、将来的には contentPane 自体へのアクセスが必要になる場合があります。境界線を変更したり、背景色を設定したり、サイズを決定したりします。そのため、ある時点で getContentPane() を使用する可能性が高いため、それを知り、慣れておくと役立ちます。

于 2011-06-26T21:31:55.667 に答える
2

//これは最後のものだけを JFrame に入れます

レイアウト マネージャーがどのように機能するかを理解する必要があります。デフォルトのコンテンツ ペインは、BorderLayout を使用する JPanel です。コンポーネントを追加し、制約を指定しない場合、デフォルトで CENTER になります。ただし、中央にコンポーネントを 1 つしか配置できないため、レイアウト マネージャーは最後に追加されたコンポーネントしか認識しません。レイアウト マネージャーが呼び出されると、そのコンポーネントの size() と location() が設定されます。もう一方のコンポーネントはサイズが 0 であるため、ペイントされません。

于 2011-06-26T21:53:01.997 に答える
2

addJava 1.6 では、 JFrame のメソッドを使用できます: http://download.oracle.com/javase/6/docs/api/javax/swing/JFrame.html (contentPane に委譲されます)。

于 2011-08-17T20:57:39.193 に答える
0

http://download.oracle.com/javase/1.4.2/docs/api/javax/swing/JFrame.html

それは言う:

JFrame クラスは Frame とは少し互換性がありません。他のすべての JFC/Swing トップレベル コンテナと同様に、JFrame には JRootPane が唯一の子として含まれています。ルート ペインによって提供されるコンテンツ ペインには、原則として、JFrame によって表示されるすべての非メニュー コンポーネントを含める必要があります。これは、AWT フレームの場合とは異なります。たとえば、AWT フレームに子を追加するには、次のように記述します。

   frame.add(child);   

ただし、JFrame を使用する場合は、代わりに子を JFrame のコンテンツ ペインに追加する必要があります。

   frame.getContentPane().add(child);  

レイアウト マネージャーの設定、コンポーネントの削除、子の一覧表示などについても同じことが言えます。これらのメソッドはすべて、通常、JFrame 自体ではなく、コンテンツ ペインに送信する必要があります。コンテンツ ペインは常に非 null になります。null に設定しようとすると、JFrame が例外をスローします。デフォルトのコンテンツ ペインには、BorderLayout マネージャーが設定されます。

于 2011-06-26T22:03:22.970 に答える