108

setSize()との主な違いは何ですかsetPreferredSize()。を使用したり、 を使用setSize()したりsetPreferredSize()、一方を使用したり、もう一方を使用したりしました。

JFrames とsにはどの呼び出しを使用すればよいJPanelですか?

4

4 に答える 4

121

使用方法は、コンポーネントの親にレイアウト マネージャーがあるかどうかによって異なります。

  • setSize()-- 親レイアウト マネージャーが存在しない場合に使用します。
  • setPreferredSize()(関連するsetMinimumSizeおよびもsetMaximumSize) -- 親レイアウト マネージャーが存在する場合に使用します。

コンポーネントの親がレイアウト マネージャーを使用している場合、このsetSize()メソッドはおそらく何もしません。これが通常影響を与える場所は、トップレベルJFrameのコンポーネント ( およびJWindow) と、スクロールされたペイン内にあるものです。setSize()レイアウト マネージャーを使用せずに、親内にコンポーネントがある場合にも呼び出す必要があります。

一般に、setPreferredSize()レイアウト マネージャーが存在する場合、期待どおりにコンポーネントをレイアウトします。ほとんどのレイアウト マネージャーは、コンポーネントの優先サイズ (および最小サイズと最大サイズ) を取得し、 と を使用setSize()setLocation()て、レイアウトのルールに従ってそれらのコンポーネントを配置します。

たとえば、BorderLayoutはその「北」領域の境界をその北コンポーネントの優先サイズに等しくしようとします。JFrameのサイズ、他のコンポーネントのサイズに応じて、それらはそれより大きくなったり小さくなったりする可能性があります。レイアウトなどに。

于 2009-11-23T15:32:18.557 に答える
10

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

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

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

于 2009-11-23T15:57:42.997 に答える
7

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

setPreferredSize希望のサイズを設定します。コンポーネントは、それが入っているコンテナのサイズによって、またはユーザーがコンポーネントのサイズを手動で変更した場合、実際にはこのサイズにならない場合があります。

于 2009-11-23T15:26:24.013 に答える
4

ちゃんと覚えたら ...

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

setPreferredSize優先サイズを設定します。Layoutmanager は、コンポーネントに十分なスペースを配置しようとします。

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

于 2009-11-23T15:29:54.957 に答える