1. 程式人生 > >java Swing佈局管理之GridBagLayout佈局

java Swing佈局管理之GridBagLayout佈局

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