私はJavaのドキュメントを読んでいますが、これら二つのメソッドの主な違いは何であるか分かりません。時々私はsetSize()
、たまにはsetPreferredSize()
を使いました。Java:コンポーネント内のsetPreferredSize()メソッドとsetSize()メソッドの違い
この2つの主な違いは何ですか? JFrames
とJPanels
にはどちらを使用しますか?
おかげ
私はJavaのドキュメントを読んでいますが、これら二つのメソッドの主な違いは何であるか分かりません。時々私はsetSize()
、たまにはsetPreferredSize()
を使いました。Java:コンポーネント内のsetPreferredSize()メソッドとsetSize()メソッドの違い
この2つの主な違いは何ですか? JFrames
とJPanels
にはどちらを使用しますか?
おかげ
...あなたはレイアウトマネージャを使用したりしていないかどうかによって異なります。それは複雑です。
やや長めの答えは次のとおりです。それがない場合は、あなたのコンポーネントの親は、何のレイアウトマネージャを持っていない場合setSize()
を使用し、setPreferredSize()
とsetMinimumSize
とsetMaximumSize
その関連。
setSize()
おそらくコンポーネントの親がレイアウトマネージャを使用している場合は何もしません。これが通常効果を持つ場所は、トップレベルのコンポーネント(JFrames
とJWindows
)と、内部にあるものはscrolled panes
です。また、レイアウトマネージャのない親の中にコンポーネントがある場合は、setSize()
に電話する必要があります。
setPreferredSize()
は、レイアウトマネージャがある場合は「正しいこと」を行う必要があります。ほとんどのレイアウトマネージャは、コンポーネントの優先サイズ(最小および最大)を取得してから、setSize()
およびsetLocation()
を使用して、レイアウトのルールに従ってコンポーネントを配置します。したがって、(例として)BorderLayout
は、北のコンポーネントのpreferred size
に等しい「北」領域の境界を作成しようとします。jframe
のサイズに応じて、それよりも大きくても小さくてもかまいませんレイアウト内の他のコンポーネントなどが含まれます。
setSize
は、指定されたサイズにコンポーネントのサイズを変更します。
setPreferredSize
が好ましいサイズを設定します。実際には、コンテナのサイズや、ユーザーが手動でコンポーネントのサイズを変更した場合、コンポーネントは実際にはこのサイズではありません。
setPreferredSize(...)の完全な例を表示できますか?これが参考になると思います。 –
IIRC ...
setSize
は、コンポーネントのサイズを設定します。
setPreferredSize
が好ましいサイズを設定します。 LayoutManagerは、コンポーネントに十分なスペースをアレンジしようとします。
それは短い答えは
jframe用にレイアウトマネージャを明示的に指定せずにjframeに2つのjpanelsを追加するとどうなりますか?どのような方法でjpanelsのサイズを設定する必要がありますか? –
コンテンツペインは、デフォルトでBorderLayoutを使用します(http://java.sun.com/docs/books/tutorial/uiswing/layout/using.html)。したがって、JFrameのコンテンツペインにはLayoutManagerがあるので、setPreferredSize _should_ work .. – miku
良いとは、JFrameにsetSizeを、コンポーネントにsetPreferredSizeを使用することを意味します。 –
setSize()
またはsetBounds()
は、レイアウトマネージャが使用されていない場合に使用できます。あなたはレイアウトマネージャを使用している場合は
ただし、などsetPreferredSize()
とsetMinimumSize()
ようsetXXXSize()
メソッドを使用してレイアウトマネージャへのヒントを提供し、コンポーネントのコンテナが要求尊重レイアウトマネージャを使用することを確認することができますサイズ。FlowLayout
、GridBagLayout
、およびSpringLayout
の管理者は、コンポーネントの推奨サイズを使用します(後の2つは、設定した制約によって異なります)。BorderLayout
とGridLayout
通常は表示されているコンポーネントに対して新しいサイズのヒントを指定する場合、 revalidateメソッドを呼び出して、その包含階層が再度レイアウトされていることを確認します。次に、repaintメソッドを呼び出します。
コンポーネントがレイアウトマネージャをデフォルト(BorderLayout?)で使用していると思ったので、レイアウトマネージャを明示的に設定しないと、setPreferredSize()の代わりにsetSize()を使用する必要がありますか? –
JPanelsはデフォルトでBorderLayoutを使用しますが、JComponentにはデフォルトのレイアウトはありません。ほとんどの場合、setSize()を使うのではなく、何かを追加する場合は、レイアウトマネージャを設定する方が良いでしょう。 – Sbodd
私は常にレイアウトマネージャを使用することをお勧めします。 SetSize()は、レイアウトマネージャが呼び出すものと考えるべきであり、あなたが呼ぶものではありません。 –