java Swing布局管理之GridBagLayout布局

时间:2023-01-28 20:28:28

GridBagLayout以表格形式布置容器内的组件,将每个组件放置在每个单元格内,而一个单元格可以跨越多个单元格合并成一个单元格,即多个单元格可以组合成一个单元格,从而实现组件的*布局。

GridBagLayout是一个灵活的布局管理器,部件如果想加入其中需借助GridBagConstraints,其中有若干个参数

1.构造方法

GirdBagLayout():建立一个新的GridBagLayout管理器。
GridBagConstraints():建立一个新的GridBagConstraints对象。
GridBagConstraints(int gridx,int gridy,
                                   int gridwidth,int gridheight,
                                   double weightx,double weighty,
                                   int anchor,int fill, Insets insets,
                                   int ipadx,int ipady):建立一个新的GridBagConstraints对象,并指定其参数的值。

参数说明:
 gridx
,gridy    ——    设置组件的位置,
                       gridx设置为GridBagConstraints.RELATIVE代表此组件位于之前所加入组件的右边。
                       gridy设置为GridBagConstraints.RELATIVE代表此组件位于以前所加入组件的下面。
                      建议定义出gridx,gridy的位置以便以后维护程序。gridx=0,gridy=0时放在0行0列。

 gridwidth,gridheight    ——    用来设置组件所占的单位长度与高度,默认值皆为1。
                           你可以使用GridBagConstraints.REMAINDER常量,代表此组件为此行或此列的最后一个组件,而且会占据所有剩余的空间。

 weightx,weighty    ——    用来设置窗口变大时,各组件跟着变大的比例。
                        当数字越大,表示组件能得到更多的空间,默认值皆为0。

 anchor    ——    当组件空间大于组件本身时,要将组件置于何处。
                  有CENTER(默认值)、NORTH、NORTHEAST、EAST、SOUTHEAST、WEST、NORTHWEST选择。

 insets    ——    设置组件之间彼此的间距。
                它有四个参数,分别是上,左,下,右,默认为(0,0,0,0)。

ipadx,ipady    ——    设置组件间距,默认值为0。

2.实例

<span style="font-family:SimHei;font-size:18px;"> import java.awt.*;
import java.util.*;
import java.applet.Applet;

public class GridBagEx1 extends Applet {

protected void makebutton(String name,
GridBagLayout gridbag,
GridBagConstraints c) {
Button button = new Button(name);
gridbag.setConstraints(button, c);
add(button);
}

public void init() {
GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();

setFont(new Font("SansSerif", Font.PLAIN, 14));
setLayout(gridbag);

c.fill = GridBagConstraints.BOTH;
c.weightx = 1.0;
makebutton("Button1", gridbag, c);
makebutton("Button2", gridbag, c);
makebutton("Button3", gridbag, c);

c.gridwidth = GridBagConstraints.REMAINDER; //end row
makebutton("Button4", gridbag, c);

c.weightx = 0.0; //reset to the default
makebutton("Button5", gridbag, c); //another row

c.gridwidth = GridBagConstraints.RELATIVE; //next-to-last in row
makebutton("Button6", gridbag, c);

c.gridwidth = GridBagConstraints.REMAINDER; //end row
makebutton("Button7", gridbag, c);

c.gridwidth = 1; //reset to the default
c.gridheight = 2;
c.weighty = 1.0;
makebutton("Button8", gridbag, c);

c.weighty = 0.0; //reset to the default
c.gridwidth = GridBagConstraints.REMAINDER; //end row
c.gridheight = 1; //reset to the default
makebutton("Button9", gridbag, c);
makebutton("Button10", gridbag, c);

setSize(300, 100);
}

public static void main(String args[]) {
Frame f = new Frame("GridBagLayout实例");
GridBagEx1 ex1 = new GridBagEx1();

ex1.init();

f.add("Center", ex1);
f.pack();
f.setSize(f.getPreferredSize());
f.setVisible(true);
}
}

</span>

3.结果

java Swing布局管理之GridBagLayout布局