Java:组件中的setPreferredSize()和setSize()方法之间的区别
好吧,我读了Java文档,我只是无法弄清楚这两种方法之间的主要区别。 有时我使用setSize()
,有时候是setPreferredSize()
,有时候是我想要的,有时是另一个。
那么,两者的主要区别是什么呢? 我应该使用哪一个JFrames
和JPanels
?
谢谢
简短的回答是:这很复杂。
稍长的答案是:如果组件的父级没有布局pipe理器,则使用setSize()
如果是,则使用setPreferredSize()
及其相关的setMinimumSize
和setMaximumSize
。
如果组件的父级使用布局pipe理器,则setSize()
可能不会执行任何操作; 这通常会产生影响的地方是顶层组件( JWindows
和JWindows
)以及scrolled panes
内的东西。 如果没有布局pipe理器的情况下,您还需要调用setSize()
。
一般来说,如果你有一个布局pipe理器, setPreferredSize()
应该做“正确的事情”。 大多数布局pipe理者通过获取组件的首选(以及最小和最大)大小,然后使用setSize()
和setLocation()
来根据布局的规则来定位这些组件。 所以(作为一个例子)一个BorderLayout
将尝试使其“北”区域的边界等于其北分量的preferred size
– 它们可能会比这更大或更小,这取决于jframe
的大小,大小布局中的其他组件,等等。
当不使用布局pipe理器时,可以使用setSize()
或setBounds()
。
但是,如果使用布局pipe理器,则可以使用setPreferredSize()
和setMinimumSize()
等setXXXSize()
方法向布局pipe理器提供提示。
并确保该组件的容器使用尊重所请求大小的布局pipe理器。 FlowLayout
, GridBagLayout
和SpringLayout
pipe理器使用组件的首选大小(后两个取决于您设置的约束),但BorderLayout
和GridLayout
通常不会。如果您为已经可见的组件指定了新的大小提示,则需要在其上调用revalidate方法来确保其包含层次结构被重新布局。 然后调用重绘方法。
setSize
将调整组件大小到指定的大小。
setPreferredSize
设置首选大小。 该组件实际上可能不是这个大小,具体取决于它所在的容器的大小,或者用户是否手动调整组件的大小。
IIRC …
setSize
设置组件的大小。
setPreferredSize
设置首选大小。 Layoutmanager将尝试为您的组件安排这么多的空间。
这取决于你是否使用布局pipe理器…