わかりました、Javaのドキュメントを読んで、これら2つのメソッドの主な違いがわからないだけです。時々 setSize()
、時には setPreferredSize()
を使用しました。
それで、2つの主な違いは何ですか? JFrames
とJPanels
にはどちらを使用すればよいですか?
ありがとう
簡単に言えば、それは複雑です。
少し長い答えは、コンポーネントの親にレイアウトマネージャがない場合はsetSize()
を使用し、存在する場合はsetPreferredSize()
および関連するsetMinimumSize
およびsetMaximumSize
を使用することです。
コンポーネントの親がレイアウトマネージャーを使用している場合、setSize()
はおそらく何もしません。これが通常効果を発揮する場所は、最上位コンポーネント(JFrames
およびJWindows
)およびscrolled panes
内にあるものです。レイアウトマネージャーなしで親の内部にコンポーネントがある場合は、setSize()
を呼び出す必要もあります。
一般的なルールとして、setPreferredSize()
は、レイアウトマネージャーがあれば「正しいこと」を行うべきです。ほとんどのレイアウトマネージャーは、コンポーネントの推奨サイズ(および最小サイズと最大サイズ)を取得し、setSize()
とsetLocation()
を使用して、レイアウトのルールに従ってコンポーネントを配置します。 (例として)BorderLayout
は、その「北」領域の境界をその北コンポーネントのpreferred size
に等しくしようとします。 jframe
のサイズ、レイアウト内の他のコンポーネントのサイズなど。
setSize()
またはsetBounds()
は、レイアウトマネージャーが使用されていない場合に使用できます。
ただし、レイアウトマネージャーを使用している場合は、setXXXSize()
やsetPreferredSize()
などのsetMinimumSize()
メソッドを使用して、レイアウトマネージャーにヒントを提供できます。
そして、コンポーネントのコンテナーが、要求されたサイズを尊重するレイアウトマネージャーを使用していることを確認してください。 FlowLayout
、GridBagLayout
、およびSpringLayout
マネージャーはコンポーネントの推奨サイズ(設定した制約に応じて後の2つ)を使用しますが、通常はBorderLayout
およびGridLayout
既に表示されているコンポーネントに新しいサイズのヒントを指定する場合、そのコンポーネントでrevalidateメソッドを呼び出して、包含階層が再度レイアウトされるようにする必要があります。次に、repaintメソッドを呼び出します。
setSize
は、コンポーネントのサイズを指定されたサイズに変更します。
setPreferredSize
は優先サイズを設定します。コンポーネントは、コンテナのサイズや、ユーザーがコンポーネントのサイズを手動で変更した場合、実際にはこのサイズにならない場合があります。
ちゃんと覚えたら ...
setSize
は、コンポーネントのサイズを設定します。
setPreferredSize
は優先サイズを設定します。 Layoutmanagerは、コンポーネント用にそれだけのスペースを配置しようとします。
レイアウトマネージャーを使用しているかどうかによって異なります...