1

内部で何が起こっているのかを詳細に理解することで、GUIデザインスキルをより効率的かつ効果的にするために、さまざまなLayoutManagerを適切に使用することに頭を悩ませています。BorderLayoutのソースを調べています。以下の、layoutContainer()メソッドから取得したコードスニペットでは、子コンポーネントのsetSize()メソッドとそれに続くsetBounds()の呼び出しに注意しています。Componentのこれらのメソッドのソースを見ると、setSize()は実際にComponent.xとComponent.yの現在の値を使用してsetBounds()を呼び出します。なぜこれが行われるのですか(完全に冗長ではありません)?setBounds()呼び出しは、setSize()呼び出しの結果を完全に上書きしませんか?

if ((c=getChild(NORTH,ltr)) != null) {
    c.setSize(right - left, c.height);
    Dimension d = c.getPreferredSize();
    c.setBounds(left, top, right - left, d.height);
    top += d.height + vgap;
}

ありがとう。

4

1 に答える 1

1

一部のコンポーネントは、優先サイズを計算する際に、現在のサイズを考慮に入れます。したがって、たとえば、テキスト領域は、その幅がわかるまで、どのくらいの高さが必要かを実際には知りません。次に、テキストの折り返しを計算し、必要な行数を計算します。

したがって、ここでの呼び出しsetSize()は、実際には幅を指定しているだけです。次に、レイアウト マネージャーは、その width に適した高さを取得して設定します。

于 2012-04-14T20:32:15.257 に答える