我正在使用Swing GroupLayout,我对值GroupLayout.DEFAULT_SIZE
和GroupLayout.PREFERRED_SIZE
感到困惑。我永远不知道何时在GroupLayout.addComponent(Component, int, int, int)
等方法中使用它们。
假设我有这段代码:
GroupLayout l = ...;
l.setHorizontalGroup(l.createSequentialGroup()
.addComponent(tf1)
.addComponent(tf2));
l.setVerticalGroup(l.createParallelGroup()
.addComponent(tf1)
.addComponent(tf2));
在JTextField
布局的单行上有两个GroupLayout
(一个水平顺序组,一个垂直平行组)。如果我现在调整窗口大小,两个组件都获得可用空间(每个50%)。但是我只希望第一个文本字段水平增长/缩小,只希望第二个文本字段垂直增长/缩小。应该使用 min , pref 和 max 的值来实现这一目标?我知道我可以尝试一下,看看哪种组合有效,但我想知道这个问题背后的原因。
答案 0 :(得分:3)
可以在How to Use GroupLayout: Component Size and Resizability中找到一些指导。关于DEFAULT_SIZE
和PREFERRED_SIZE
,
它们可以用作方法
中的参数
addComponent(Component comp, int min, int pref, int max)
强制组件可调整大小(允许收缩和增长):
group.addComponent(component, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
这允许组件在零大小(最小)到任何大小(
Short.MAX_VALUE
之间调整大小,因为最大大小意味着“无限”)。如果我们希望组件不缩小到其默认最小大小以下,我们将在第二个参数中使用GroupLayout.DEFAULT_SIZE
而不是0。使组件固定大小(抑制大小调整):
group.addComponent(component, GroupLayout.PREFERRED_SIZE,
GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)...
有趣的是,常数值是负数,因此不能将它们误认为实际约束。
答案 1 :(得分:1)
我还对GroupLayout.DEFAULT_SIZE
和GroupLayout.PREFERRED_SIZE
在GroupLayout.SequentialGroup.addComponent(Component c, int min, int pref, int max)
中的使用方式感到困惑,即使在引用了Java Tutorials的GroupLayout部分和一篇标题为{{3}的java.net文章之后也是如此。 }。
深入了解JDK 1.6.0_27 GroupLayout.javasource我在ComponentSpring类中找到了答案。从那以后我就能制定出这些规则:
如果需要最小尺寸:
min
值为非负值,将返回该值。PREFERRED_SIZE
,则我们会遵循首选尺寸规则。如果需要首选尺寸:
pref
值为非负值,将返回该值。DEFAULT_SIZE
或PREFERRED_SIZE
,则返回组件的首选大小。如果需要最大尺寸:
max
值为非负值,将返回该值。PREFERRED_SIZE
,则我们会遵循首选尺寸规则。正如垃圾桶已经指出的那样,定义是否定的。除DEFAULT_SIZE
或PREFERRED_SIZE
之外,min,pref和max的任何其他负值都是错误并且命中断言。
SequentialGroup.addComponent
min,pref和max size之间的相互作用对我来说并不是很明显。现在我知道为什么PREFERRED_SIZE,DEFAULT_SIZE,PREFERRED_SIZE
被修复,为什么中间参数是DEFAULT_SIZE
或PREFERRED_SIZE
以及NetBeans如何生成像DEFAULT_SIZE,300,Short.MAX_VALUE
这样的固定大小值无关紧要。