6

我正在使用 Swing GroupLayout,我对这些值GroupLayout.DEFAULT_SIZEGroupLayout.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在一条线上有两个s 布局GroupLayout(水平顺序组和垂直平行组)。如果我现在调整窗口大小,两个组件都会获得可用空间(每个 50%)。但我只希望第一个文本字段水平增长/缩小,只有第二个文本字段垂直增长/缩小。我应该使用什么minprefmax值来实现这一点?我知道我可以尝试一下,看看哪种组合有效,但我想知道这个问题背后的原因。

4

2 回答 2

3

可以在如何使用 GroupLayout:组件大小和可调整性中找到一些指导。关于DEFAULT_SIZEPREFERRED_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)...

有趣的是,常数值是负数,因此它们不会被误认为是实际约束。

于 2010-04-02T01:11:39.807 回答
1

即使在参考了 Java 教程的 GroupLayout 部分和标题为“了解 GroupLayout,第 1 部分”的 java.net 文章之后,我也对如何使用GroupLayout.DEFAULT_SIZE以及GroupLayout.PREFERRED_SIZE在 中使用感到困惑。GroupLayout.SequentialGroup.addComponent(Component c, int min, int pref, int max)

深入研究 JDK 1.6.0_27 GroupLayout.javasource 我在 ComponentSpring 类中找到了答案。由此我能够制定出这些规则:

如果需要最小尺寸:

  1. 并且提供的min值是非负的,则返回该值。
  2. 否则PREFERRED_SIZE,我们遵循首选尺寸的规则。
  3. 否则返回组件的最小尺寸。

如果需要首选尺寸:

  1. 并且提供的pref值是非负的,则返回该值。
  2. 否则,如果是DEFAULT_SIZEPREFERRED_SIZE,则返回组件的首选大小。

如果需要最大尺寸:

  1. 并且提供的max值是非负的,则返回该值。
  2. 否则PREFERRED_SIZE,我们遵循首选尺寸的规则。
  3. 否则返回组件的最大尺寸。

正如垃圾神已经指出的那样,定义是负面的。DEFAULT_SIZE除了or之外,min、pref 和 max 的任何其他负值PREFERRED_SIZE都是错误和命中断言。

SequentialGroup.addComponent从本教程中,我并没有立即看出最小、首选和最大尺寸之间的相互作用。现在我知道为什么是固定的,为什么中间参数是或NetBeans 如何生成固定大小的值(如工作PREFERRED_SIZE,DEFAULT_SIZE,PREFERRED_SIZE)并不重要。DEFAULT_SIZEPREFERRED_SIZEDEFAULT_SIZE,300,Short.MAX_VALUE

于 2012-01-13T22:52:17.477 回答