GridBagLayout布局實現簡單電子郵件發送介面,gridbaglayout布局
網格塊布局(GridBagLayout)在JAVA中是使用最為複雜,功能最強大的一種,它是在GridLayout的基礎上發展而來。該布局也是將整個容器分成若干行,列組成的單元,但各行可以有不同的高度,每欄也可以有不同的寬度,一個組件可以佔用一個,也可以佔用多個單元格。
GridBagLayout在布置組件時需要許多資訊來描述一個組件要放的位置,大小,伸縮性等。為此,在該布局中的組件加入時,要指定一個約束對(GridBagConstraints),
其中封裝了與位置,大小等有關的約束資料。具體命令格式為:add(組件,約束對象);
約束對象常用屬性如下:
Ⅰ:規定位置屬性:一般通過gridx,gridy規定布局佔用單元格的位置,最左上方為0,0. 也可以用方向位置參數控制組件的位置,類似於BorderLayout布局,這裡的方向位置參數包括:CENTER , EAST , NORTH, NORTHEAST,SOUTH, SOUTHWEST,WEST.
Ⅱ: gridheight, gridwidth:組件佔用單元格的個數。在規定組件的位置和高,寬時,也可也用兩個常量:如果gridwidth值為RELATIVE,表示該組件相對前一個組件佔下一個位置;如果gridwidth值為REMAINDER,則表示組件本欄中佔用所有剩餘的單元格,如果是在一行的最後一個單元格的gridwidth使用了REMAINDER,則下一行要將gridwidth值改為1;否則,下一行的第一個組件將佔滿整行。
Ⅲ:rowHeights,columnWidth:指定行高,欄寬。預設情況下行和寬的大小分別由最高和最寬的組件決定。
Ⅳ:weightx,weighty:控制單元格的行和寬的伸展,在一行和一列中最多隻能有一個組件指定伸展參數,伸展可保證表單大小變化時組件的大小也作相應的調整。
Ⅴ :填充(fill)屬性:規定組件填充網格的方式。常量包括BOTH,HORIZONTAL,VERTICAL和NONE,其中BOTH代表水平和垂直兩個方式伸展,也就是佔滿整個單元格;而NONE代表組件不伸展,保持原來大小。
貼上代碼:
import java.awt.*;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;public class GridBagLayoutExample extends Frame { private static final long serialVersionUID = 1L;public GridBagLayoutExample(){super("GB記憶編程"); Label receiveLabel=new Label("收件者:"); Label ccLabel=new Label("抄送:"); Label subjectLabel=new Label("主題"); TextField receiveField=new TextField(); //收件者; TextField ccField=new TextField(); //抄送; TextField subjectField= new TextField(); //主題; TextArea mailArea=new TextArea(8,40); //輸入郵件文字地區; setLayout(new GridBagLayout()); GridBagConstraints gridBag=new GridBagConstraints(); gridBag.fill=GridBagConstraints.HORIZONTAL; //以水平方式填充; gridBag.weightx=0; //行長不變 gridBag.weighty=0; //行高不變 addToBag(receiveLabel,gridBag,0,0,1,1); //收信人標籤; addToBag(ccLabel,gridBag,0,1,1,1); //抄送人標籤; addToBag(subjectLabel,gridBag,0,2,1,1); //主題標籤位置 gridBag.weightx=100; //行自適應縮放 gridBag.weighty=0; //行高不變 addToBag(receiveField,gridBag,1,0,2,1); addToBag(ccField,gridBag,1,1,2,1); addToBag(subjectField,gridBag,1,2,2,1); gridBag.fill=GridBagConstraints.BOTH; //採用全填充方式布局; gridBag.weightx=100; // 行自適應縮放 gridBag.weighty=100; //列自適應縮放; addToBag(mailArea,gridBag,0,4,3,1); //佔3欄一行 addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ dispose(); } }); setSize(300,300); setVisible(true); } /*將一個組件按指定大小加入到GridBagLayout布局的指定位置*/ void addToBag(Component c, GridBagConstraints gdc,int x,int y,int w,int h){ gdc.gridx=x; gdc.gridy=y; gdc.gridheight=h; gdc.gridwidth=w; add(c,gdc); //按指定約束加入組件; }public static void main(String[] args) { new GridBagLayoutExample();}}
如果本篇對您有協助,請點擊關注GB記憶部落格按鈕。