我阅读了Java文档,但无法弄清楚这两种方法之间的主要区别是什么。有时我用了setSize(),有时是setPreferredSize(),有时是一个做我想做的,有时是另一个。
setSize()
setPreferredSize()
那么,两者的主要区别是什么?我应该使用哪一个JFrames和JPanels?
JFrames
JPanels
简短的答案是:很复杂。
稍长一点的答案是:setSize()如果组件的父级没有布局管理器,setPreferredSize()以及与之相关的组件setMinimumSize(setMaximumSize如果有),则使用。
setMinimumSize
setMaximumSize
setSize()如果组件的父级使用布局管理器,则可能什么都不做;通常会对其产生影响的位置将位于顶级组件(JFrames和JWindows)及其内部的东西上scrolled panes。setSize()如果你的组件内部没有布局管理器,则还必须调用。
JWindows
scrolled panes
通常,setPreferredSize()如果你有布局管理器,则应该做“正确的事情”;大多数布局管理器的工作方式是获取其组件的首选(以及最小和最大)大小,然后根据布局规则使用setSize()和setLocation()放置这些组件。因此(作为示例),a BorderLayout将尝试使其“北部”区域的边界等于preferred size其北部部分的边界-它们最终可能大于或小于该范围,具体取决于jframe的大小,其他组件的大小在布局中,依此类推。
setLocation()
a BorderLayout
preferred size
jframe