DEFAULT_SIZE和PREFERRED_SIZE之间有什么区别?

时间:2010-04-01 20:21:32

标签: java swing resize size grouplayout

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

2 个答案:

答案 0 :(得分:3)

可以在How to Use GroupLayout: Component Size and Resizability中找到一些指导。关于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)...

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

答案 1 :(得分:1)

我还对GroupLayout.DEFAULT_SIZEGroupLayout.PREFERRED_SIZEGroupLayout.SequentialGroup.addComponent(Component c, int min, int pref, int max)中的使用方式感到困惑,即使在引用了Java Tutorials的GroupLayout部分和一篇标题为{{3}的java.net文章之后也是如此。 }。

深入了解JDK 1.6.0_27 GroupLayout.javasource我在ComponentSpring类中找到了答案。从那以后我就能制定出这些规则:

如果需要最小尺寸:

  1. 并且提供的min值为非负值,将返回该值。
  2. 如果是PREFERRED_SIZE,则我们会遵循首选尺寸规则。
  3. 否则返回组件的最小大小。
  4. 如果需要首选尺寸:

    1. 并且提供的pref值为非负值,将返回该值。
    2. 如果是DEFAULT_SIZEPREFERRED_SIZE,则返回组件的首选大小。
    3. 如果需要最大尺寸:

      1. 并且提供的max值为非负值,将返回该值。
      2. 如果是PREFERRED_SIZE,则我们会遵循首选尺寸规则。
      3. 否则返回组件的maximumsize。
      4. 正如垃圾桶已经指出的那样,定义是否定的。除DEFAULT_SIZEPREFERRED_SIZE之外,min,pref和max的任何其他负值都是错误并且命中断言。

        SequentialGroup.addComponent min,pref和max size之间的相互作用对我来说并不是很明显。现在我知道为什么PREFERRED_SIZE,DEFAULT_SIZE,PREFERRED_SIZE被修复,为什么中间参数是DEFAULT_SIZEPREFERRED_SIZE以及NetBeans如何生成像DEFAULT_SIZE,300,Short.MAX_VALUE这样的固定大小值无关紧要。

相关问题