JFrame javaのsetContentPane()、doLayout()、setLayout()のどちらをいつ使用するか混乱しているので、誰かが私に次のことを説明できますか?
別の質問:JFrameやJPanel以外の他のSwingコンテナを使用する場合、コンテンツペインを手動で設定/作成する必要はありませんが、他の場合は手動で設定する必要があると言ったら、正しいですか?
前もって感謝します
setContentPaneはウィンドウ内の最上位のビジュアル要素を設定するために使用され、setLayoutはレイアウトマネージャーを設定し、doLayoutはレイアウトマネージャーを呼び出します。通常、doLayoutを呼び出す必要はありません。これは、要素が追加/削除されたり、何かのサイズが変更されたりした場合など、主要なプロパティが変更されたときに自動的に呼び出されるためです。
これらの機能と混同される理由はありません。
フレームに視覚要素を追加する場合は、setContentPane(component)
(またはadd(component)
)を使用します。
レイアウトマネージャー(GridBagLayout
またはなどFlowLayout
)を設定する場合は、を使用しますsetLayout(layoutmanager)
。
何かを変更してフレームが奇妙に見える場合は、を呼び出しますdoLayout()
。
Javaドキュメントによると:
LayoutManagerを設定します。呼び出しをcontentPaneに条件付きで転送するためにオーバーライドされます。
つまり、基本的には、呼び出しがcontentpaneに転送されるため、LayoutManager
contentPaneのJFrame
を設定できます。setLayout(..)
JFrame
contentPaneプロパティを設定します。このメソッドはコンストラクターによって呼び出されます。Swingのペイントアーキテクチャでは、封じ込め階層に不透明なJComponentが必要です。これは通常、コンテンツペインによって提供されます。コンテンツペインを置き換える場合は、不透明なJComponentに置き換えることをお勧めします。
これは、私たちに追加された(そして全体のサイズJFrame
にまたがる)メインコンポーネントを指します。これは、インスタンスへの呼び出しで他のすべてのコンポーネントが追加される場所です。JFrame
add(..)
JFrame
このコンテナにそのコンポーネントを配置させます。ほとんどのプログラムは、このメソッドを直接呼び出すべきではありませんが、代わりにvalidateメソッドを呼び出す必要があります。
これにより、コンテナのを変更したときに視覚的な変更が表示されますが、LayoutManager
ご覧のとおり、これを呼び出すのではなく、サイズ、再レイアウト、および/または追加/削除されたコンポーネントから視覚的な変更を行うためにvalidate()
/を使用する必要がrevalidate()
ありますrepaint()
コンテナから、表示されます。
はどうかと言うと:
JFrameやJPanel以外の他のSwingコンテナを使用する場合、コンテンツペインを手動で設定/作成する必要はありませんが、他の場合は手動で設定する必要があると言っても正しいですか?
いいえ、これも当てはまりJPanel
ます。
AJPanel
はContainer
、JFrameはを使用しますsetContentPane
。これにより、コンテナを設定できるため、 JPanel
/はcontentPaneとして追加できるようにJComponent
拡張 されます。したがって、メソッドへの露出。デフォルトでコンテンツペインがありますか、それとも他にどのようにコンポーネントを追加しますか?Conatiner
setContentPane(..)
JPanel
したがって、JPanel
contentPaneを手動で作成する必要はありません。