-1

JFrame javaのsetContentPane()doLayout()setLayout()のどちらをいつ使用するか混乱しているので、誰かが私に次のことを説明できますか?

別の質問:JFrameやJPanel以外の他のSwingコンテナを使用する場合、コンテンツペインを手動で設定/作成する必要はありませんが、他の場合は手動で設定する必要があると言ったら、正しいですか?

前もって感謝します

4

2 に答える 2

2

setContentPaneはウィンドウ内の最上位のビジュアル要素を設定するために使用され、setLayoutはレイアウトマネージャーを設定し、doLayoutはレイアウトマネージャーを呼び出します。通常、doLayoutを呼び出す必要はありません。これは、要素が追加/削除されたり、何かのサイズが変更されたりした場合など、主要なプロパティが変更されたときに自動的に呼び出されるためです。

これらの機能と混同される理由はありません。

  • フレームに視覚要素を追加する場合は、setContentPane(component)(またはadd(component))を使用します。

  • レイアウトマネージャー(GridBagLayoutまたはなどFlowLayout)を設定する場合は、を使用しますsetLayout(layoutmanager)

  • 何かを変更してフレームが奇妙に見える場合は、を呼び出しますdoLayout()

于 2013-01-05T17:31:03.383 に答える
2

Javaドキュメントによると:

LayoutManagerを設定します。呼び出しをcontentPaneに条件付きで転送するためにオーバーライドされます。

つまり、基本的には、呼び出しがcontentpaneに転送されるため、LayoutManagercontentPaneJFrameを設定できます。setLayout(..)JFrame

contentPaneプロパティを設定します。このメソッドはコンストラクターによって呼び出されます。Swingのペイントアーキテクチャでは、封じ込め階層に不透明なJComponentが必要です。これは通常、コンテンツペインによって提供されます。コンテンツペインを置き換える場合は、不透明なJComponentに置き換えることをお勧めします。

これは、私たちに追加された(そして全体のサイズJFrameにまたがる)メインコンポーネントを指します。これは、インスタンスへの呼び出しで他のすべてのコンポーネントが追加される場所です。JFrameadd(..)JFrame

このコンテナにそのコンポーネントを配置させます。ほとんどのプログラムは、このメソッドを直接呼び出すべきではありませんが、代わりにvalidateメソッドを呼び出す必要があります。

これにより、コンテナのを変更したときに視覚的な変更が表示されますが、LayoutManagerご覧のとおり、これを呼び出すのではなく、サイズ、再レイアウト、および/または追加/削除されたコンポーネントから視覚的な変更を行うためにvalidate()/を使用する必要がrevalidate()ありますrepaint()コンテナから、表示されます。

はどうかと言うと:

JFrameやJPanel以外の他のSwingコンテナを使用する場合、コンテンツペインを手動で設定/作成する必要はありませんが、他の場合は手動で設定する必要があると言っても正しいですか?

いいえ、これも当てはまりJPanelます。

AJPanelContainer、JFrameはを使用しますsetContentPane。これにより、コンテナを設定できるため、 JPanel/はcontentPaneとして追加できるようにJComponent 拡張 されます。したがって、メソッドへの露出。デフォルトでコンテンツペインがありますか、それとも他にどのようにコンポーネントを追加しますか?ConatinersetContentPane(..)JPanel

したがって、JPanel contentPaneを手動で作成する必要はありません。

于 2013-01-05T17:41:03.813 に答える