2

http://docs.oracle.com/javase/tutorial/uiswing/layout/howLayoutWorks.htmlで、次のように読むことができます。

「最終的に、コンテナの最適なサイズを決定するために、システムは封じ込め階層の最下部にあるコンテナのサイズを決定します。これらのサイズは、封じ込め階層に浸透し、最終的にコンテナの合計サイズを決定します。」

このコメントは特定のレイアウトマネージャーに関連付けられていませんが、一般的なレイアウトメカニズムに適用されているようです。

経験豊富なJava/Swingプログラマーが、このアプローチがトップダウンアプローチよりも優れている理由を説明できれば幸いです。

トップダウンアプローチでは、トップレベルコンテナはそのコンポーネントに次のように通知します。-自分でレイアウトするためのWxHピクセルがあるコンポーネントです。-その後、これらのコンポーネントは、最終的には独自のコンポーネントに同じことを行うように指示します。使用可能なスペースに応じて、各コンポーネントは、階層の下にあるサブコンポーネントのレイアウト方法を決定します。最終的に、一部のコンポーネントは、スペースが不足している場合に自分自身をペイントしないことを決定する可能性があります。

このアプローチは、(プログラマーにとって)理解し、維持するのが簡単なように思えます。

トップダウンで動作する代替のレイアウトマネージャーを知っている人はいますか?

ありがとう。

4

2 に答える 2

3

あの引用をもう一度読み直した方がいいと思う

最終的に、コンテナの最適なサイズを決定するために、システムは格納階層の最下部にあるコンテナのサイズを決定します。次に、これらのサイズが格納階層に浸透し、最終的にコンテナーの合計サイズが決定されます。

これは、コンテナの最適なサイズについて述べています。もちろん、これはすべての子コンポーネントの最適なサイズによって決定されるため、下から上に計算するのが最適です。

packでメソッドを呼び出すと、次のようになりますJFrame

ただし、最終的に子コンポーネントは、親が許可するだけのスペースしか占有できないことは事実です。ここで のLayoutManager出番です。親にレイアウト マネージャーを設定すると、子コンポーネントの位置とサイズが通知されます (通常、子コンポーネントが示す優先サイズなどを考慮します)。

于 2012-08-30T16:10:58.063 に答える
1

レイアウト マネージャーがそのように機能する理由は、管理するコンテナーとその子のサイズを把握する必要があるためです。これを行うための最善の方法は、可能な限り深く掘り下げ、再び戻ってそのサイズを把握することです (ボトムアップ)。コンテナに他のコンテナが子として含まれている場合、これは再帰的に行われます。

例えば:

  • JPanel j1があります
  • j1にはJButtonがあります
  • j1 は別のパネル j2 の内側にあります

j2 のサイズを把握する最善の方法は、jbutton までたどることです。JButton のサイズが、たとえば 50 x 50 ピクセルであることがわかります。つまり、j1 のサイズは 50 x 50 にそれに含まれるすべての子を加えたものになります。200 x 200 として出力されるとしましょう。この場合、j2 はその子が 200 x 200 であることを認識し、これを考慮してサイズを計算します。最終的に、サイズ (j2 の場合) は 500 x 500 に達します。

于 2012-08-30T16:03:04.210 に答える