我看到它与接受的答案不同。
1) 我应该完全避免使用这些方法吗?
永远不要回避!他们在那里向布局管理器表达组件的大小限制。如果您不使用任何布局管理器并尝试自己管理可视化布局,则可以避免使用它们。
不幸的是,Swing 没有提供合理的默认尺寸。但是,与其设置组件的尺寸,不如在 OOP 中使用合理的默认值来降低您自己的组件。 (在这种情况下,您在后代类中调用 setXXX。)或者,您可以覆盖 getXXX 方法以获得相同的效果。
2) 方法的定义是有原因的。那么我应该什么时候使用它们呢?在什么情况下?出于什么目的?
总是。创建组件时,根据该组件的用途设置其实际的最小/首选/最大尺寸。例如,如果您有一个用于输入国家符号(如 UK)的 JTextField,它的首选大小应与两个字符(使用当前字体等)一样宽,但让它变得更大可能毫无意义。毕竟,国家符号是两个字符。
相反,如果您有一个 JTextField 用于输入,例如一个客户名称,它可以有一个首选大小,比如 20 个字符的像素大小,但如果调整布局大小,它可以变得更大,因此将最大大小设置为更大。同时,有一个 0px 宽的 JTextField 是没有意义的,所以设置一个现实的最小尺寸(我会说 2 个字符的像素大小)。
3) 使用这些方法的负面后果究竟是什么?
(我只能考虑在不同屏幕分辨率的系统之间增加可移植性)。
没有负面影响。这些是布局管理器的提示。
4) 我认为任何 LayoutManager 都不能完全满足所有所需的布局需求。
我真的需要为布局上的每一个小变化都实现一个新的 LayoutManager 吗?
不,绝对不是。通常的做法是级联不同的基本布局管理器,例如水平和垂直布局。
例如下面的布局:
<pre>
+--------------+--------+
| ###JTABLE### | [Add] |
| ...data... |[Remove]|
| ...data... | |
| ...data... | |
+--------------+--------+
</pre>
有两个部分。左右部分为横向布局。右边部分是一个添加到水平布局的JPanel,这个JPanel是一个垂直布局,垂直布局按钮。
当然,这对于现实生活中的布局可能会变得棘手。因此,如果您要开发任何严肃的东西,基于网格的布局管理器(例如 MigLayout)会更好。
5) 如果对 4 的回答是“是”,这会不会导致 LayoutManager 类的激增而难以维护?
不,你绝对不应该开发布局管理器,除非你需要一些非常特别的东西。
6) 在我需要定义比例的情况下...
在组件的子级之间(例如,child1 应该使用 10% 的空间,child2 应该使用 40% ,child3 50%),是否可以在不实现自定义 LayoutManager 的情况下实现这一点?
基本上,一旦首选尺寸设置正确,您可能不想按百分比执行任何操作。简单地说,因为百分比是没有意义的(例如,将 JTextField 设置为窗口大小的 10% 是没有意义的 - 因为可以缩小窗口以使 JTextField 变为 0px 宽,或者可以扩展窗口以使 JTextField 跨越两个显示器多显示器设置)。
但是,有时您可能会使用百分比来控制 gui 的较大构建块(例如面板)的大小。
您可以使用 JSplitPane 来预先设置两侧的比例。或者,您可以使用 MigLayout,它允许您以百分比、像素和其他单位设置此类约束。