我看到的与接受的答案有所不同。
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,它允许您以百分比,像素和其他单位设置此类约束。
JEditorPane
与本身并不暗示宽度的HTML一起使用。OTOH我不确定是否错过了什么。我将仔细查看对该主题的答复,但是如果您有任何意见,尤其是对后一种情况,请关注。