web-dev-qa-db-ja.com

Java:コンポーネントのsetPreferredSize()メソッドとsetSize()メソッドの違い

わかりました、Javaのドキュメントを読んで、これら2つのメソッドの主な違いがわからないだけです。時々 setSize() 、時には setPreferredSize() を使用しました。

それで、2つの主な違いは何ですか? JFramesJPanelsにはどちらを使用すればよいですか?

ありがとう

99
David Robles

簡単に言えば、それは複雑です。

少し長い答えは、コンポーネントの親にレイアウトマネージャがない場合はsetSize()を使用し、存在する場合はsetPreferredSize()および関連するsetMinimumSizeおよびsetMaximumSizeを使用することです。

コンポーネントの親がレイアウトマネージャーを使用している場合、setSize()はおそらく何もしません。これが通常効果を発揮する場所は、最上位コンポーネント(JFramesおよびJWindows)およびscrolled panes内にあるものです。レイアウトマネージャーなしで親の内部にコンポーネントがある場合は、setSize()を呼び出す必要もあります。

一般的なルールとして、setPreferredSize()は、レイアウトマネージャーがあれば「正しいこと」を行うべきです。ほとんどのレイアウトマネージャーは、コンポーネントの推奨サイズ(および最小サイズと最大サイズ)を取得し、setSize()setLocation()を使用して、レイアウトのルールに従ってコンポーネントを配置します。 (例として)BorderLayoutは、その「北」領域の境界をその北コンポーネントのpreferred sizeに等しくしようとします。 jframeのサイズ、レイアウト内の他のコンポーネントのサイズなど。

112
Sbodd

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

ただし、レイアウトマネージャーを使用している場合は、setXXXSize()setPreferredSize()などのsetMinimumSize()メソッドを使用して、レイアウトマネージャーにヒントを提供できます。

そして、コンポーネントのコンテナーが、要求されたサイズを尊重するレイアウトマネージャーを使用していることを確認してください。 FlowLayoutGridBagLayout、およびSpringLayoutマネージャーはコンポーネントの推奨サイズ(設定した制約に応じて後の2つ)を使用しますが、通常はBorderLayoutおよびGridLayout既に表示されているコンポーネントに新しいサイズのヒントを指定する場合、そのコンポーネントでrevalidateメソッドを呼び出して、包含階層が再度レイアウトされるようにする必要があります。次に、repaintメソッドを呼び出します。

10
Varun

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

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

5
Glen

ちゃんと覚えたら ...

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

setPreferredSizeは優先サイズを設定します。 Layoutmanagerは、コンポーネント用にそれだけのスペースを配置しようとします。

レイアウトマネージャーを使用しているかどうかによって異なります...

4
miku