Java:组件中setPreferredSize()和setSize()方法之间的差异

时间:2009-11-23 15:21:33

标签: java swing jframe jpanel

好的,我阅读了Java文档,我无法弄清楚这两种方法之间的主要区别。有时我使用setSize(),有时使用setPreferredSize(),有时一个人做我想要的,有时候做另一个。

那么,两者之间的主要区别是什么?我应该将哪一个用于JFramesJPanels

由于

4 个答案:

答案 0 :(得分:112)

简短的回答是:它很复杂。

稍长的答案是:如果您的组件的父级没有布局管理器,则使用setSize();如果是,则使用setPreferredSize()及其相关的setMinimumSizesetMaximumSize

如果组件的父级使用布局管理器,

setSize()可能不会做任何事情;通常会对顶级组件(JFramesJWindows)以及scrolled panes内的内容产生影响的地方。如果父组件中没有布局管理器,则还必须调用setSize()

作为一般规则,如果您有布局管理员,setPreferredSize()应该做“正确的事情”;大多数布局管理器通过获取其组件的首选(以及最小和最大)大小,然后使用setSize()setLocation()根据布局规则定位这些组件来工作。因此(作为示例)BorderLayout将尝试使其“北”区域的边界等于其北部组件的preferred size - 它们可能最终大于或小于此,取决于jframe的大小,布局中其他组件的大小等等。

答案 1 :(得分:10)

当没有使用布局管理器时,可以使用

setSize()setBounds()

但是,如果您使用的是布局管理器,则可以使用setXXXSize()setPreferredSize()setMinimumSize()方法向布局管理器提供提示。

确保组件的容器使用一个尊重请求大小的布局管理器。 FlowLayoutGridBagLayoutSpringLayout管理员使用组件的首选大小(后两者取决于您设置的约束),但通常BorderLayoutGridLayout不。如果为已经可见的组件指定新的大小提示,则需要在其上调用revalidate方法以确保再次布置其包含层次结构。然后调用重绘方法。

答案 2 :(得分:5)

setSize会将组件的大小调整为指定的大小。

setPreferredSize设置首选大小。该组件实际上可能不是这个大小,具体取决于它所在容器的大小,或者用户是否手动调整组件大小。

答案 3 :(得分:4)

IIRC ......

setSize设置组件的大小。

setPreferredSize设置首选大小。 Layoutmanager将尝试为您的组件安排那么多空间。

这取决于您是否使用布局管理器......