GridBagLayout类是一个灵活的布局管理器,GridBagLayout类的对象维持一个动态的矩形单元网格,然后我们可以把组件放进一个或多个矩形单元网格,组件大就多放几个,组件小就少放几个。
具体每个组件放在的位置都是要使用GridBagConstraints类的对象来设置。
GridBagContraints类的成员变量列表如下:
1、gridx,gridy
指定组件放在哪个单元中。其值应该设为常数CridBagConstraints.RELATIVE。然后按标准顺序将组件加入网格包布局。从左到右,从上到下。
2、gridwidth,gridheight
指定组件将占用几行几列
s.gridwidth=1;//该方法是设置组件水平所占用的格子数,如果为0,就说明该组件是该行的最后一个
3、weightx,weighty
指定在一个GridBagLayout中应如何分配空间。缺省为0。
s.weightx = 0;//该方法设置组件水平的拉伸幅度,如果为0就说明不拉伸,不为0就随着窗口增大进行拉伸,0到1之间
s.weighty=0;//该方法设置组件垂直的拉伸幅度,如果为0就说明不拉伸,不为0就随着窗口增大进行拉伸,0到1之间
4、ipadx,ipady
指定组件的最小宽度和高度。可确保组件不会过分收缩。
5、insets
组件和显示区、外部填充
6、ipadx,ipady
组件和显示区、内部填充
7、fill
指定在单元大于组件的情况下,组件如何填充此单元,缺省为组件大小不变,以下为静态数据成员列表,它们是fill变量的值。
GridBagConstraints.NONE 不改变组件大小
GridBagConstraints.HORIZONTAL 增加组件宽度,使其水平填充显示区域
GridBagConstraints.VERTICAL 增加组件高度,使其垂直填充显示区域
GridBagConstraints.BOTH 使组件填充整个显示区域
实例:
public class TestGridBag {
public static void main(String[] args) {
JFrame jf = new JFrame("测试窗口");
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
GridBagLayout gridBag = new GridBagLayout(); // 布局管理器
GridBagConstraints c = null; // 约束
JPanel panel = new JPanel(gridBag);
JButton btn01 = new JButton("Button01");
//将btn02、btn03按GridBagLayout放到JPanel中
JButton btn02 = new JButton("Button02");
JButton btn03 = new JButton("Button03");
GridBagLayout igridBag = new GridBagLayout(); // 布局管理器
GridBagConstraints ic = null; // 约束
JPanel iPanel = new JPanel(igridBag);
ic = new GridBagConstraints();
ic.insets = new Insets(0, 10, 0, 10);
igridBag.addLayoutComponent(btn02, ic);
ic = new GridBagConstraints();
ic.insets = new Insets(0, 10, 0, 10);
igridBag.addLayoutComponent(btn02, ic);
iPanel.add(btn02);
iPanel.add(btn03);
JTextField txt02 = new JTextField("TextField");
JComboBox<String> cbx01 = new JComboBox<String>(new String[]{"选项A", "选项B", "选项C"});
JComboBox<String> cbx02 = new JComboBox<String>(new String[]{"选项A", "选项B", "选项C"});
/* 添加 组件 和 约束 到 布局管理器 */
//btn01
c = new GridBagConstraints();
c.anchor = GridBagConstraints.WEST;
c.insets = new Insets(2, 10, 2, 10);
c.gridx = 0;
c.gridy = 0;
gridBag.addLayoutComponent(btn01, c);
//btn02
c = new GridBagConstraints();
c.anchor = GridBagConstraints.EAST;
c.insets = new Insets(2, 10, 2, 10);
c.gridwidth = GridBagConstraints.REMAINDER;
gridBag.addLayoutComponent(iPanel, c);
//txt
c = new GridBagConstraints();
c.fill = GridBagConstraints.BOTH;
c.insets = new Insets(2, 10, 2, 10);
c.weightx = 1;
c.weighty = 1;
c.gridwidth = GridBagConstraints.REMAINDER;
gridBag.addLayoutComponent(txt02, c);
//cbx01
c = new GridBagConstraints();
c.anchor = GridBagConstraints.WEST;
c.insets = new Insets(2, 10, 2, 10);
gridBag.addLayoutComponent(cbx01, c);
//cbx02
c = new GridBagConstraints();
c.anchor = GridBagConstraints.EAST;
c.insets = new Insets(2, 10, 2, 10);
c.gridwidth = GridBagConstraints.REMAINDER;
gridBag.addLayoutComponent(cbx02, c);
/* 添加 组件 到 内容面板 */
panel.add(btn01);
panel.add(iPanel);
panel.add(txt02);
panel.add(cbx01);
panel.add(cbx02);
jf.setContentPane(panel);
jf.setSize(600, 400);
jf.setLocationRelativeTo(null);
jf.setVisible(true);
}
}