Java:组件中的 setP referSize() 和 setSize() 方法之间的区别

2022-08-31 09:39:39

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

我应该对 s 和 s 使用什么调用?JFrameJPanel


答案 1

使用情况取决于组件的父级是否具有布局管理器。

  • setSize()-- 在父布局管理器不存在时使用;
  • setPreferredSize()(也是相关的和) -- 在父布局管理器存在时使用。setMinimumSizesetMaximumSize

如果组件的父级使用布局管理器,则该方法可能不会执行任何操作。这通常会产生影响的位置将对顶级组件(s和s)以及滚动窗格内部的内容产生影响。如果父级中有组件而没有布局管理器,则还必须调用。setSize()JFrameJWindowsetSize()

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

例如,a 尝试使其“北”区域的边界等于其北分量的首选大小---它们最终可能大于或小于该大小,具体取决于 的大小 、布局中其他分量的大小,依此类推。BorderLayoutJFrame


答案 2

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

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

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


推荐