GroupLayout。
把多个组件按区域划分到不同的Group,,再根据各个Group相对于水平轴(Horizontal)和垂直轴(Vertical)的排列方式来管理。
GroupLayout布局特征对 X轴(水平方向)和 Y轴(竖直方向)独立的,因此在水平和竖直方向上分别指定一个组,来分别确定组件在水平方向 和 竖直方向 上的位置。
//确定组件在 X轴 方向上的位置, 指定布局的水平组的方法
GroupLayout.setHorizontalGroup(GroupLayout.Group group);
* 水平组(仅确定 X 轴方向的坐标/排列方式)
* 水平串行: 水平排列(左右排列)
* 水平并行: 垂直排列(上下排列)
-------------------------------------------------------
//确定组件在 Y轴 方向上的位置, 指定布局的垂直组的方法
GroupLayout.setVerticalGroup(GroupLayout.Group group);
* 垂直组(仅确定 Y 轴方向的坐标/排列方式)
* 垂直串行: 垂直排列(上下排列)
* 垂直并行: 水平排列(左右排列)
布局设计
演示代码
package com.msh.util;
import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
public class DemoGroupLayout {
public static void main(String[] args) {
JFrame jf = new JFrame("演示分组布局");
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
JPanel jp = new JPanel();
GroupLayout layout = new GroupLayout(jp); //分组布局的面板
jp.setLayout(layout);
layout.setAutoCreateGaps(true);//组件之间的间隙自动适应
layout.setAutoCreateContainerGaps(true); //容器与触到容器边框的组件之间的间隙自动适应
JLabel lbl01 = new JLabel("账号");
JLabel lbl02 = new JLabel("密码");
JTextField textField01 = new JTextField("请输入~");
JTextField textField02 = new JTextField("请输入~");
JButton btn01 = new JButton("登录");
JButton btn02 = new JButton("注册");
/*
*水平组(仅确定 X 轴方向的坐标/排列方式)
*/
//水平并行: 垂直排列(上下排列)lbl01 和 lbl02
GroupLayout.ParallelGroup hParalGp01 = layout.createParallelGroup();
hParalGp01.addComponent(lbl01);
hParalGp01.addComponent(lbl02);
//水平并行(上下)textField01 和 textField02
GroupLayout.ParallelGroup hParalGp02 = layout.createParallelGroup();
hParalGp02.addComponent(textField01).addComponent(textField02);
//水平串行(左右)hParalGp01 和 hParalGp02
GroupLayout.SequentialGroup hSeqGp01 = layout.createSequentialGroup();
hSeqGp01.addGroup(hParalGp01).addGroup(hParalGp02);
//水平串行(左右)btn01 和 btn02
GroupLayout.SequentialGroup hSeqGp02 = layout.createSequentialGroup();
hSeqGp02.addComponent(btn01).addGap(20).addComponent(btn02); //添加 间隙
//水平并行(上下)hSeqGp01 和 hSeqGp02
GroupLayout.ParallelGroup hParalGroup = layout.createParallelGroup();
hParalGroup.addGroup(hSeqGp01).addGroup(hSeqGp02);
layout.setHorizontalGroup(hParalGroup); // 指定布局的 水平组(水平坐标)
/*
*垂直组(仅确定 Y 轴方向的坐标/排列方式)
*/
// 垂直并行(左右)lbl01 和 textField01
GroupLayout.ParallelGroup vParalGroup01 = layout.createParallelGroup().addComponent(lbl01).addComponent(textField01);
// 垂直并行(左右)lbl02 和 textField02
GroupLayout.ParallelGroup vParalGroup02 = layout.createParallelGroup().addComponent(lbl02).addComponent(textField02);
// 垂直并行(左右)btn01 和 btn02
GroupLayout.ParallelGroup vParalGroup03 = layout.createParallelGroup().addComponent(btn01).addComponent(btn02);
// 垂直串行(上下)vParalGroup01, vParalGroup02 和 vParalGroup03
GroupLayout.SequentialGroup vSeqGroup = layout.createSequentialGroup().addGroup(vParalGroup01).addGroup(vParalGroup02).addGroup(vParalGroup03);
layout.setVerticalGroup(vSeqGroup); // 指定布局的 垂直组(垂直坐标)
jf.setContentPane(jp);
//jf.pack();
jf.setSize(300, 150);
jf.setLocationRelativeTo(null);
jf.setVisible(true); // 显示窗口
}
}
运行效果