108

setSize()和之间的主要区别是什么setPreferredSize()。有时我使用setSize(),有时setPreferredSize(),有时一个做我想要的,有时另一个。

JFrame我应该为s 和s使用什么调用JPanel

4

4 回答 4

121

用法取决于组件的父级是否有布局管理器。

  • setSize()-- 在父布局管理器不存在时使用;
  • setPreferredSize()(也与其相关的setMinimumSizeand setMaximumSize)——当父布局管理器存在时使用。

如果组件的父级使用布局管理器,该setSize()方法可能不会做任何事情;这通常会产生影响的地方是顶级组件(JFrames和JWindows)以及滚动窗格内的东西。setSize()如果您在没有布局管理器的父级中有组件,您也必须调用。

通常,setPreferredSize()如果存在布局管理器,将按预期布局组件;大多数布局管理器通过获取其组件的首选(以及最小和最大)大小来工作,然后根据布局规则使用setSize()和定位这些组件。setLocation()

例如,aBorderLayout试图使其“北”区域的边界等于其北分量的首选大小——它们最终可能会大于或小于该值,具体取决于 的大小JFrame、其他分量的大小在布局中,等等。

于 2009-11-23T15:32:18.557 回答
10

setSize()或者setBounds()可以在没有使用布局管理器时使用。

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

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

于 2009-11-23T15:57:42.997 回答
7

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

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

于 2009-11-23T15:26:24.013 回答
4

IRC ...

setSize设置组件的大小。

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

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

于 2009-11-23T15:29:54.957 回答