2009-11-23 14 views

答えて

105

...あなたはレイアウトマネージャを使用したりしていないかどうかによって異なります。それは複雑です。

やや長めの答えは次のとおりです。それがない場合は、あなたのコンポーネントの親は、何のレイアウトマネージャを持っていない場合setSize()を使用し、setPreferredSize()setMinimumSizesetMaximumSizeその関連。

setSize()おそらくコンポーネントの親がレイアウトマネージャを使用している場合は何もしません。これが通常効果を持つ場所は、トップレベルのコンポーネント(JFramesJWindows)と、内部にあるものはscrolled panesです。また、レイアウトマネージャのない親の中にコンポーネントがある場合は、setSize()に電話する必要があります。

setPreferredSize()は、レイアウトマネージャがある場合は「正しいこと」を行う必要があります。ほとんどのレイアウトマネージャは、コンポーネントの優先サイズ(最小および最大)を取得してから、setSize()およびsetLocation()を使用して、レイアウトのルールに従ってコンポーネントを配置します。したがって、(例として)BorderLayoutは、北のコンポーネントのpreferred sizeに等しい「北」領域の境界を作成しようとします。jframeのサイズに応じて、それよりも大きくても小さくてもかまいませんレイアウト内の他のコンポーネントなどが含まれます。

+1

コンポーネントがレイアウトマネージャをデフォルト(BorderLayout?)で使用していると思ったので、レイアウトマネージャを明示的に設定しないと、setPreferredSize()の代わりにsetSize()を使用する必要がありますか? –

+3

JPanelsはデフォルトでBorderLayoutを使用しますが、JComponentにはデフォルトのレイアウトはありません。ほとんどの場合、setSize()を使うのではなく、何かを追加する場合は、レイアウトマネージャを設定する方が良いでしょう。 – Sbodd

+8

私は常にレイアウトマネージャを使用することをお勧めします。 SetSize()は、レイアウトマネージャが呼び出すものと考えるべきであり、あなたが呼ぶものではありません。 –

5

setSizeは、指定されたサイズにコンポーネントのサイズを変更します。

setPreferredSizeが好ましいサイズを設定します。実際には、コンテナのサイズや、ユーザーが手動でコンポーネントのサイズを変更した場合、コンポーネントは実際にはこのサイズではありません。

+0

setPreferredSize(...)の完全な例を表示できますか?これが参考になると思います。 –

4

IIRC ...

setSizeは、コンポーネントのサイズを設定します。

setPreferredSizeが好ましいサイズを設定します。 LayoutManagerは、コンポーネントに十分なスペースをアレンジしようとします。

それは短い答えは

+0

jframe用にレイアウトマネージャを明示的に指定せずにjframeに2つのjpanelsを追加するとどうなりますか?どのような方法でjpanelsのサイズを設定する必要がありますか? –

+3

コンテンツペインは、デフォルトでBorderLayoutを使用します(http://java.sun.com/docs/books/tutorial/uiswing/layout/using.html)。したがって、JFrameのコンテンツペインにはLayoutManagerがあるので、setPreferredSize _should_ work .. – miku

+0

良いとは、JFrameにsetSizeを、コンポーネントにsetPreferredSizeを使用することを意味します。 –

9

setSize()またはsetBounds()は、レイアウトマネージャが使用されていない場合に使用できます。あなたはレイアウトマネージャを使用している場合は

ただし、などsetPreferredSize()setMinimumSize()

ようsetXXXSize()メソッドを使用してレイアウトマネージャへのヒントを提供し、コンポーネントのコンテナが要求尊重レイアウトマネージャを使用することを確認することができますサイズ。FlowLayoutGridBagLayout、およびSpringLayoutの管理者は、コンポーネントの推奨サイズを使用します(後の2つは、設定した制約によって異なります)。BorderLayoutGridLayout通常は表示されているコンポーネントに対して新しいサイズのヒントを指定する場合、 revalidateメソッドを呼び出して、その包含階層が再度レイアウトされていることを確認します。次に、repaintメソッドを呼び出します。

関連する問題