GridBagLayout(),网格袋布局,维持一个动态的矩形单元的网格,矩形单元格被称为显示区域。
组件可占用一个或多个的矩形单元格,组件不要求相同尺寸。
组件由GridBagLayou管理,关联一个约束GridBagConstraints类。
约束组件属性,比如:位置,大小,外部填充,内部填充等。
GridBagConstraints Class
约束属性与值
int gridx,gridy;
组件显示区域开始显示的位置(单元格坐标)坐标为(0,0);默认为RELATIVE,定位哪个指定的网格。
int gridwidth,gridheight;
组件X向,Y向所占单元格的个数,默认值为1, 0为组件是该行的最后一个。
int weightx, weighty;
组件在X向和Y向上如何按比例伸缩. 0不拉伸,1随着窗口增大进行拉伸.
int fill;
窗口伸缩时组件如何跟着自动伸缩;
NONE: (默认)不调整组件大小;
HORIZONTAL: 加宽组件,使它在水平方向上填满其显示区域,但是不改变高度;
VERTICAL: 加高组件,使它在垂直方向上填满其显示区域,但是不改变宽度;
BOTH: 使组件完全填满其显示区域。
布局设计
演示代码
package com.msh.util;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
public class DemoGridBagLayout {
public static void main(String[] args) {
JFrame jf = new JFrame();
jf.setTitle("演示网格袋布局");
JPanel jp = new JPanel();
JButton btn01 = new JButton("New");
JButton btn02 = new JButton("Save");
JButton btn03 = new JButton("Save As");
String[] str = { "java", "C#", "HTML5" };
JComboBox jcb = new JComboBox(str);
JTextField jtxf = new JTextField("please input...");
JButton btn04 = new JButton("Clear...");
JList jls = new JList(str);
JTextArea jtxArea = new JTextArea();
jtxArea.setBackground(Color.lightGray);
GridBagLayout layout = new GridBagLayout();
jf.setLayout(layout);
jf.add(btn01); //加载组件
jf.add(btn02);
jf.add(btn03);
jf.add(jp);
jf.add(jcb);
jf.add(jtxf);
jf.add(btn04);
jf.add(jls);
jf.add(jtxArea);
//定义一个约束GridBagConstraints,布局每个组件的显示位置
GridBagConstraints s= new GridBagConstraints();
s.fill = GridBagConstraints.BOTH; //组件所在的区域比组件本身要大时,使组件完全填满其显示区域
//布局第一行:三个按钮,从左到右排列,
s.gridwidth=1; //设置组件水平所占用的格子数,0为组件是该行的最后一个
s.weightx = 0; //设置组件水平的拉伸幅度,0不拉伸,1随着窗口增大进行拉伸
s.weighty=0; //设置组件垂直的拉伸幅度,0不拉伸,1随着窗口增大进行拉伸
layout.setConstraints(btn01, s);
layout.setConstraints(btn02, s);
layout.setConstraints(btn03, s);
//布局第一行:改行最后空余位置,用面板填充
s.gridwidth=0;
s.weightx = 0;
s.weighty=0;
layout.setConstraints(jp, s);
//布局第二行:第一个显示位置是下拉组合框,占用两单元格,水平不拉伸,垂直不拉伸
s.gridwidth=2;
s.weightx = 0;
s.weighty=0;
layout.setConstraints(jcb, s);
//布局第二行:改行的第二个位置显示文本字段的
s.gridwidth=4;
s.weightx = 1;
s.weighty=0;
layout.setConstraints(jtxf, s);
//把"清空"按钮,布局在改行最后一个位置
s.gridwidth=0;
s.weightx = 0;
s.weighty=0;
layout.setConstraints(btn04, s);
//布局第三行:第一个位置:显示列表框,
s.gridwidth=2; //水平所占用的格子数2
s.weightx = 0;
s.weighty=1; //垂直的拉伸
layout.setConstraints(jls, s);
s.gridwidth=5; //水平所占用的格子数5
s.weightx = 0;
s.weighty=1; //垂直的拉伸
layout.setConstraints(jtxArea, s);
jf.setSize(600, 600);
jf.setLocation(300, 200);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
jf.setVisible(true);
}
}
运行程式