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



