8

我正在尝试在我的应用程序中构建一个 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 不会有帮助吗?

我错过了什么?

4

3 回答 3

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)
  );

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

于 2010-04-19T20:22:15.023 回答
3

尝试添加:

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

在第二个按钮之后。MAX_VALUE 将导致间隙根据需要扩大。

于 2010-04-19T20:20:50.410 回答
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 )
    );
于 2014-08-27T17:25:29.850 回答