与Java Swing的GroupLayout混合对齐

时间:2010-04-19 19:51:35

标签: java swing grouplayout

我正在尝试在我的应用程序中构建一个GUI窗口。我要做的是有一个窗口,顶部有几个按钮,还有一个大文本区域。像这样:

+--------------------------------------------------+
| [button1] [button2]                    [button3] |
| +----------------------------------------------+ |
| | text area                                    | |
| |                                              | |
| |                                              | |
| |                                              | |
| +----------------------------------------------+ |
+--------------------------------------------------+

我几乎在那里,使用GroupLayout:

  layout.setHorizontalGroup(
    layout.createParallelGroup()
      .addGroup(layout.createSequentialGroup()
        .addComponent(button1)
        .addComponent(button2))
        .addComponent(closeWindow))
      .addComponent(textarea1)
  );

  layout.setVerticalGroup(
    layout.createSequentialGroup()
      .addGroup(layout.createParallelGroup()
        .addComponent(button1)
        .addComponent(button2)
        .addComponent(button3))
      .addComponent(textarea)
  );

问题是,这最终会使button3与左边对齐,另外两个。我似乎无法弄清楚如何只在一个按钮上指定对齐方式。我可以在整个按钮栏上进行GroupLayout.Alignment.TRAILING,但是它会击中所有3个按钮,这也不太正确。

那么正确的方法是什么?由于对齐仅适用于并行组,我不认为拥有一个包含两个顺序组的Horizo​​ntalGroup会有帮助吗?

我错过了什么?

3 个答案:

答案 0 :(得分:11)

在顺序组中添加间隙。保留水平组:

layout.setVerticalGroup(
    layout.createSequentialGroup()
      .addGroup(layout.createParallelGroup()
        .addComponent(button1)
        .addComponent(button2)
        .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        .addComponent(button3))
      .addComponent(textarea)
  );

与这些参数的差距充当了“弹簧”,占据了所有可用空间。

答案 1 :(得分:3)

尝试添加:

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 1, Short.MAX_VALUE)

第二个按钮后。 MAX_VALUE将导致间隙尽可能多地扩展。

答案 2 :(得分:1)

您想要使用仅在顺序组上可用的addPreferredGap()。下面的代码为您提供了所需的布局。

    layout.setHorizontalGroup(
            layout.createParallelGroup()
                    .addGroup( layout.createSequentialGroup()
                            .addComponent( button1 )
                            .addComponent( button2 )
                            .addPreferredGap( LayoutStyle.ComponentPlacement.RELATED, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE )
                            .addComponent( button3 ) )
                    .addComponent( textArea )
    );
    layout.setVerticalGroup(
            layout.createSequentialGroup()
                    .addGroup( layout.createParallelGroup()
                            .addComponent( button1 )
                            .addComponent( button2 )
                            .addComponent( button3 ) )
                    .addComponent( textArea )
    );