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.结果




Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐