问题
好的,我阅读了Java文档,我无法弄清楚这两种方法之间的主要区别。有时我使用setSize()
,有时候是setPreferredSize()
,有时一个人做我想要的,有时候做另一个。
那么,两者之间的主要区别是什么?我应该使用哪一个JFrames
和JPanels
?
谢谢
#1 热门回答(105 赞)
简短的回答是:它很复杂。
稍长的答案是:usesetSize()
if你的组件的父级没有布局管理器,而setPreferredSize()
及其相关的setMinimumSize
和setMaximumSize
如果它没有。
setSize()
如果组件的父级使用布局管理器,可能不会执行任何操作;通常会对顶级组件(JFrames
和JWindows
)以及位于scrolled panes
内的内容产生影响的地方。如果父组件中没有布局管理器,则还必须调用setSize()
。
作为一般规则,如果你有布局管理员,setPreferredSize()
应该做"正确的事情";大多数布局管理器通过获取其组件的首选(以及最小和最大)大小来工作,然后使用setSize()
和setLocation()
根据布局规则定位这些组件。因此(作为一个例子)aBorderLayout
将尝试使其"北"区域的边界等于其北部组件的preferred size
- 它们可能最终大于或小于它,这取决于jframe
的大小,其他组件的大小。布局,等等。
#2 热门回答(9 赞)
当没有使用布局管理器时,可以使用setSize()
orsetBounds()
。
但是,如果你使用的是布局管理器,则可以使用476486479方法(如setPreferredSize()
和setMinimumSize()
etc)为布局管理器提供提示。
并确保组件的容器使用一个尊重请求大小的布局管理器。 TheFlowLayout
,GridBagLayout
和SpringLayout
管理器使用组件的首选大小(后两个取决于你设置的约束),但是BorderLayout
和GridLayout
通常没有。如果为已经可见的组件指定新的大小提示,则需要在其上调用revalidate方法确保其包含层次结构再次布局。然后调用重绘方法。
#3 热门回答(5 赞)
setSize
将将组件的大小调整为指定的大小。
setPreferredSize
设置首选大小。该组件实际上可能不是这个大小,具体取决于它所在容器的大小,或者用户是否手动重新调整组件大小。