1

我正在使用 GroupLayout 在 Windows 7(64 位)上的 Java 7 中构建我的框架。以下是我在 GroupLayout 上查看 Oracle 示例时使用的布局结构。

所需布局:

+------------------------------------------+

|  [Label1] [ComboBox1]                    |

|  [Label2] [TextField1] [Button1]         |

|  [Label3] [TextField2] [Button2]         |

|  [Label4] [ComboBox2]                    |

+------------------------------------------+

我的代码设计:

layout.setHorizontalGroup(layout.createSequentialGroup()

    .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING))
        .addComponent(Label1)
        .addComponent(Label2)
        .addComponent(Label3)
        .addComponent(Label4)
    .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING))
        .addComponent(ComboBox1)
        .addComponent(TextField1)
        .addComponent(TextField2)
        .addComponent(ComboBox2)                
    .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING))
        .addComponent(Button1)
        .addComponent(Button2)

);

layout.linkSize(SwingConstants.HORIZONTAL, Button1, Button2);

layout.setVerticalGroup(layout.createSequentialGroup()

    .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE))
            .addComponent(Label1)
            .addComponent(ComboBox1)
    .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE))
            .addComponent(Label2)
            .addComponent(TextField1)
            .addComponent(Button1)
    .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE))
            .addComponent(Label3)
            .addComponent(TextField2)
            .addComponent(Button2)
    .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE))
            .addComponent(Label4)
            .addComponent(ComboBox2)
);

我需要让更有经验的人检查一下。目前,此代码会导致尺寸对齐问题ComboBox1, ComboBox2TextField2显着减少。

你有什么建议来解决这个问题?

4

2 回答 2

2

对于那些类型的布局,我几乎总是选择FormLayoutJGoodies。当然这不包含在标准 JDK 中,所以不确定这是否适合您。

该布局的主要好处之一(imo)是它允许轻松对齐列中的组件,并具有体面且可控的调整大小行为。

于 2012-08-29T12:15:36.520 回答
2

首先,我个人会避免GroupLayout,它并不是真正用于手动编码。

我会改用 GridBagLayout

setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
add(label1, gbc);
gbc.gridx++;
add(comboBox1, gbc);

gbc.gridx = 0;
gbc.gridy++;
add(label2, gbc);
gbc.gridx++;
add(textField1, gbc);
gbc.gridx++;
add(button1, gbc);

gbc.gridx = 0;
gbc.gridy++;
add(label3, gbc);
gbc.gridx++;
add(textField2, gbc);
gbc.gridx++;
add(button2, gbc);

gbc.gridx = 0;
gbc.gridy++;
add(label4, gbc);
gbc.gridx++;
add(comboBox2, gbc);
于 2012-08-29T11:17:48.860 回答