| 說明:GridBagLayout只有一個無參的構造器,要使用它就必須用setConstraints(Component comp,GridBagConstraints constraints)將它和GridBagConstraints關聯起來!當GridBagLayout與無參的GridBagConstraints關聯時,此時它就相當於一個GridLayout,只不過,用GridLayout布局的組件會隨著視窗的變 大(小)而變 大(小)。但GridBagLayout 不會,因此,這就是我們使用GridBagConstants來設定各個約束條件的目的! 查看API文檔,我們就知道GridBagConstraints有十一個屬性!自我感覺API文檔裡面有些東西講得不是很好理解,就象gridx 與 gridy 這兩個屬性一樣,有些書上說gridx表示行,gridy表示列!API文檔裡面更是講了一大堆。 現在,提供本人對這些屬性的理解:
1, gridx: 表示組件的左邊緣與網格左部之間的距離,如果學過HTML的話,那麼gridx就 相當於HTML 裡面的leftmargin屬性。 2, gridy: 表示組件的上邊緣與網格頂部之間的距離,相當於HTML裡面的topmargin屬性! 3, ipadx: 表示組件在預設的大小上,往水平方向上再加上多少像素的大小! 4, ipady: 表示組件在預設的大小上,往垂直方向上再加上多少像素的大小! 5, fill: 當組件沒有空間大時。它可以確定是否填充空間! 6, anchor: 當組件沒有空間大時。它可以確定在顯示地區中放置組件的位置! 7, insets: 設定組件之間彼此的間距,它有四個參數,分別是上,左,下,右, 預設值為(0,0,0,0) 8,weightx: 用來設定當視窗變大時,各組件沿水平方向跟著變大的比例,數字越大,表示組件能得到的空間越大 9,weighty: 用來設定當視窗變大時,各組件沿垂直方向跟著變大的比例,數字越大,表示組件能得 到的空間越大 10,gridwidth 用來設定組件所佔的單位長度,預設值為1。 11,gridheight 用來設定組件所佔的單位高度,預設值為1。 對gridwidth與gridheight做了修改後,必須記得要對fill屬性做相應的修改,否則組件所顯示的大小 還是原來的大小。 =========================================================================================== 建議:運用GridBagLayout這種布局方式時,比較適合於把所有的組件圍成一個四邊形。所以,我們在設計這種布局方式前,可以先在紙上畫一下每個組件的大概位置,然後保證每一行的長度(即每一行的gridwidth之和)都相等,且每一列的長度(即每一列的gridheight之和)也相等,這樣,就能按我們要的藍圖而得到實現! 另外,有些屬性是要跟另外一些屬性搭配著用的,只有把相聯絡的屬性都做了相應的修改,我們才能看到變化!比如說上面所說到的gridwidth與gridheight必須與fill屬性聯合起來用才能看到結果!
下面來個實際的例子: import java.awt.*; import javax.swing.*;
public class Test { public static void main(String[] args) { JFrame f = new JFrame("Test"); JButton b1 = new JButton("Button1"); JButton b2 = new JButton("Button2"); JButton b3 = new JButton("Button3"); JButton b4 = new JButton("Button4"); JButton b5 = new JButton("Button5"); JButton b6 = new JButton("Button6"); JButton b7 = new JButton("Button7"); GridBagConstraints c = new GridBagConstraints(); GridBagLayout g = new GridBagLayout(); f.setLayout(g); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.add(b1); //由於屬性都有預設值,前面的按預設值來加入! f.add(b2); f.add(b3); c.gridy = 1; c.gridwidth = 3 ; //修改了gridwidth值 c.fill = GridBagConstraints.BOTH; //所以這裡要做相應的修改才能按gridwidth的值來顯示 g.setConstraints(b4,c); f.add(b4); c = new GridBagConstraints(); c.gridy = 2; g.setConstraints(b5,c); f.add(b5); c = new GridBagConstraints(); c.gridy = 3; g.setConstraints(b6,c); f.add(b6); c = new GridBagConstraints(); c.gridx = 1; c.gridy = 2; c.gridwidth = 2; c.gridheight = 2; c.fill = GridBagConstraints.BOTH; //同上面的注釋 g.setConstraints(b7,c); f.add(b7); f.pack(); f.setVisible(true); } } |