我对被接受的答案有不同看法。
1)我应该完全避免使用这些方法吗?
永远不要避免使用它们!它们用于向布局管理器表达组件的大小约束条件。如果您没有使用任何布局管理器并尝试自己管理视觉布局,则可以避免使用它们。
不幸的是,Swing没有合理的默认尺寸。但是,与其设置组件的尺寸,不如使用更好的OOP方式下降自己的组件以获得合理的默认值。(在这种情况下,您在后代类中调用setXXX。)或者,您可以覆盖getXXX方法以实现相同的效果。
2)这些方法已经被定义了一个原因。那么我应该在什么情况下使用它们?使用场景是什么?用途是什么?
总是使用。当您创建组件时,请根据该组件的使用设置其实际最小/首选/最大尺寸。例如,如果您有一个用于输入国家符号(例如UK)的JTextField,则其首选尺寸应足够宽以容纳两个字符(使用当前字体等),但可能让它变得更大是毫无意义的。毕竟,国家符号只有两个字符。
相反,如果您有一个用于输入客户姓名等信息的JTextField,则其首选尺寸可以为像20个字符的像素大小一样,但在布局调整大小时可以变大,因此将最大尺寸设置为更大。同时,拥有0像素宽的JTextField是无意义的,因此请设置合理的最小尺寸(我会说2个字符的像素大小)。
3)使用这些方法的负面影响到底是什么?
(我只能想到增加了不同屏幕分辨率系统之间的可移植性。)
没有负面影响。这些是布局管理器的提示。
4)我认为任何LayoutManager都不能完全满足所有所需的布局需求。
我真的需要为我的每个小变化实现新的LayoutManager吗?
绝对不需要。通常的方法是级联不同的基本布局管理器,例如水平和垂直布局。
例如,下面的布局:
<pre>
+--------------+--------+
|
| ...data... |[Remove]|
| ...data... | |
| ...data... | |
+--------------+--------+
</pre>
这个布局有两个部分。左边和右边是水平布局。右边是添加到水平布局中的JPanel,并且这个JPanel具有垂直布局,可以将按钮垂直布局。
当然,在实际布局中可能会变得棘手。因此,基于网格的布局管理器(例如MigLayout)更适合您开发任何严肃的内容。
5) 如果问题4的答案是“是”,那么这不会导致LayoutManager类的增加,从而变得难以维护吗?
不,除非您需要非常特殊的东西,否则绝对不应该开发布局管理器。
6) 在需要定义比例的情况下...
在组件的子元素之间定义比例(例如,子元素1应使用10%的空间,子元素2应使用40%,子元素3应使用50%),是否可以在不实现自定义LayoutManager的情况下实现?
基本上,一旦设置了首选大小,您可能不想使用百分比做任何事情。只是因为百分比是无意义的(例如,将JTextField的大小设置为窗口大小的10%是无意义的-因为可以缩小窗口,使JTextField变为0像素宽,或者可以扩展窗口,使JTextField跨越多个显示器在多显示器设置中)。
但是,您可能会经常使用百分比来控制GUI的更大构建块的大小(例如面板)。
您可以使用JSplitPane,在其中可以预先设置两侧的比例。或者,您可以使用MigLayout,它允许您以百分比、像素和其他单位设置此类约束。
JEditorPane
。但是,我不确定是否有什么遗漏。我将仔细查看线程上的回复,但如果您对后一种情况有任何评论,我也很感兴趣。 - Andrew Thompson