我正在使用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, ComboBox2
和TextField2
显著减小的对准问题。
你对此有什么建议?
首先,我个人会避免使用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)是,它允许轻松地对齐列中的组件,并具有良好且可控的调整大小行为。