在此示例中,G
roupLayout可以简单地依靠标签的首选大小,而不必诉诸任何
setXXXSize()方法。用这种方法
- 标签的空间始终容纳最大的标签。
- 文本字段可以通过有用的方式调整大小。
- 跨平台和字体的结果是正确的。
- “你无需为大多数组件指定任何内容,因为组件本身具有默认的所需调整大小行为。” — 如何使用
GroupLayout
:组件大小和可调整大小
使用GroupLayout.Alignment.TRAILING
右对齐标签是个人喜好,我添加了第二个面板以嵌套在另一个布局中显示其工作方式。
import java.awt.EventQueue;import javax.swing.BorderFactory;import javax.swing.Box;import javax.swing.BoxLayout;import javax.swing.GroupLayout;import javax.swing.Jframe;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JTextField;public class GroupPanel extends JPanel { private JLabel label1 = new JLabel("Primary:"); private JTextField field1 = new JTextField(16); private JLabel label2 = new JLabel("Secondary:"); private JTextField field2 = new JTextField(16); private JLabel label3 = new JLabel("Tertiary:"); private JTextField field3 = new JTextField(16); public GroupPanel(int n) { this.setBorder(BorderFactory.createTitledBorder("Panel " + n)); GroupLayout layout = new GroupLayout(this); this.setLayout(layout); layout.setAutoCreateGaps(true); layout.setAutoCreateContainerGaps(true); layout.setHorizontalGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(GroupLayout.Alignment.TRAILING) .addComponent(label1) .addComponent(label2) .addComponent(label3)) .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING) .addComponent(field1) .addComponent(field2) .addComponent(field3)) ); layout.setVerticalGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(GroupLayout.Alignment.baseLINE) .addComponent(label1) .addComponent(field1)) .addGroup(layout.createParallelGroup(GroupLayout.Alignment.baseLINE) .addComponent(label2) .addComponent(field2)) .addGroup(layout.createParallelGroup(GroupLayout.Alignment.baseLINE) .addComponent(label3) .addComponent(field3)) ); } private static void display() { Jframe f = new Jframe("GroupPanel"); f.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE); f.setLayout(new BoxLayout(f.getContentPane(), BoxLayout.Y_AXIS)); f.add(new GroupPanel(1)); f.add(new GroupPanel(2)); f.add(Box.createVerticalGlue()); f.pack(); f.setLocationRelativeTo(null); f.setVisible(true); } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { display(); } }); }}


