Java GroupLayout验证所需的设计和对齐帮助



我正在使用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显著减小的对准问题。

你对此有什么建议?

首先,我个人会避免使用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);

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

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

相关内容

  • 没有找到相关文章

最新更新