【发布时间】:2010-12-19 12:29:12
【问题描述】:
setSize() 和 setPreferredSize() 之间的主要区别是什么。有时我使用setSize(),有时使用setPreferredSize(),有时一个做我想做的事,有时另一个做。
JFrames 和JPanels 应该使用什么呼叫?
【问题讨论】:
setSize() 和 setPreferredSize() 之间的主要区别是什么。有时我使用setSize(),有时使用setPreferredSize(),有时一个做我想做的事,有时另一个做。
JFrames 和JPanels 应该使用什么呼叫?
【问题讨论】:
使用取决于组件的父级是否有布局管理器。
setSize() -- 父布局管理器不存在时使用;setPreferredSize()(也与其相关的setMinimumSize 和setMaximumSize)——在父布局管理器存在时使用。如果组件的父级使用布局管理器,setSize() 方法可能不会做任何事情;这通常会产生影响的地方是顶级组件(JFrames 和JWindows)以及滚动窗格内的东西。如果父组件中有没有布局管理器的组件,您还必须调用 setSize()。
一般来说,setPreferredSize() 会在布局管理器存在的情况下按预期布局组件;大多数布局管理器通过获取其组件的首选(以及最小和最大)大小来工作,然后使用 setSize() 和 setLocation() 根据布局规则定位这些组件。
例如,BorderLayout 试图使其“北”区域的边界等于其北分量的首选大小——它们最终可能会更大或更小,具体取决于 @ 的大小987654333@,布局中其他组件的大小等等。
【讨论】:
setSize() 或 setBounds() 可以在没有使用布局管理器时使用。
但是,如果您使用的是布局管理器,则可以使用 setXXXSize() 方法(如 setPreferredSize() 和 setMinimumSize() 等)向布局管理器提供提示。
并确保组件的容器使用符合请求大小的布局管理器。 FlowLayout、GridBagLayout 和 SpringLayout 管理器使用组件的首选大小(后两个取决于您设置的约束),但 BorderLayout 和 GridLayout 通常不使用。如果您指定新的大小提示对于已经可见的组件,您需要对其调用 revalidate 方法以确保其包含层次结构再次布局。然后调用重绘方法。
【讨论】:
setSize 会将组件调整为指定大小。
setPreferredSize 设置首选大小。组件实际上可能不是这个大小,这取决于它所在容器的大小,或者用户是否手动调整了组件的大小。
【讨论】:
IIRC ...
setSize 设置组件的大小。
setPreferredSize 设置首选大小。
Layoutmanager 将尝试为您的组件安排那么多空间。
这取决于您是否使用布局管理器...
【讨论】: