1. 程式人生 > >AWT佈局管理器

AWT佈局管理器

AWT的佈局管理器:

FlowLayout:從左向右排列所有元件,遇到邊界就會折回下一行從新開始。

構造器:FlowLayout()、FlowLayout(int align)、FlowLayout(int align, int hgap, int vgap)

其中的hgap和vgap代表水平間距和垂直間距,align指的是元件的排列方向(從左向右,從右向左,從中間向兩邊)

使用FlowLayout的靜態常量來設定這個引數:FlowLayout.LEFT,FlowLayout.CENTER,FlowLayout.RIGHT。

 

 

BorderLayout:

將容器分為EAST(東),SOUTH(南),WEST(西),NORTH(北),CENTER(中央)

在向使用此佈局管理器的容器中新增元件時,需要制定新增到的區域,否則預設新增到中間區域裡,而當我們向一個區域新增多個元件時,後放入的元件會覆蓋前面的元件。

構造器:BorderLayout()、BorderLayout(int hgap,int vgap)

hgap和vgap代表的水平間距和垂直間距。

指定元件新增到的區域時,可以使用它的靜態常量:BorderLayout.EAST、BorderLayout.WEST、BorderLayout.NORTH、BorderLayout.SOUTH、 BorderLayout.CENTER。

eg:

Frame frame = new Frame();

frame.setLayout(new BorderLayout(5,5));

frame.add(new Button("南"),SOUTH);

BorderLayout最多隻能放5個元件

但是可以先在Panel中新增多個元件,再將Panel新增到BorderLayout佈局管理器中,因此實際可以放的元件要遠超過5個。

 

 

GridLayout:將容器分割成大小相同的網格,在新增元件時預設從左到右從上到下,將元件依次新增到每個網格中,每個元件的大小由其所新增到的網格的大小所決定。

構造器:GridLayout(int rows,int cols)、GridLayout(int rows ,int cols,int hgap,int vgap)

 

 

CardLayout:加入容器的元件類似一疊卡片,只有最上面的元件內容可見。

構造器:CardLayout()、CardLayout(int hgap, int vgap)

控制組件的方法:

first(Container target);//顯示target容器中的第一張卡片

last(Container target);

previous(Container target);

next(Container target);

show(Container target,String name);//顯示targer容器中指定名字的卡片

 

 

GridBagLayout:是功能最強大也是最複雜的佈局管理器,新增到其中的元件可以橫跨一個或多個網格,並可以設定各網格的大小各不相同,當視窗大小發生變化時,其也可以準確的控制視窗各部分的反應。為了處理GridBagLayout中元件的大小和跨越性,我們還需要一個GridBagConstraints物件,用這個物件與特定的元件相關聯,來控制組件的大小和跨越性。在使用GridBagLayout時一般需要4步:

1.  建立GridBagLayout,並指定容器使用該佈局管理器

GridBagLayout gb = new GridBagLayout();

container.setLayout(gb);

      2.     建立GridBagConstraints的物件,並設定該物件的相關屬性

         GridBagConstraints gbc = new GridBagConstraints();

         gbc.gridx=2;

         gbc.gridy=1;

         gbc.gridwidth=2;

         gbc.gridheight=1;

3.      呼叫GridBagLayout物件的方法來建立GridBagConstraints物件與受控制組件之間的聯絡。

    gb.setConstraints(c,gbc);//設定c元件受gbc控制

4.       新增元件

  container.add(c);

通常可以將2,3,4步寫成一個addComponent方法,為這個方法傳遞所需要的引數,來進行新增元件的化簡。

使用GridBagLayout關鍵在於GridBagConstraints,該類具有如下方法:

fill:設定元件如何佔領空白區域,它可取如下幾個值:GridBagConstraints.NONE、GridBagConstraints.HORIZONTAL、GridBagConstraints.VERTICAL、GridBagConstraints.BOTH。

gridx,gridy:設定元件的左上角所在網格的索引(網格的索引從0 開始),此外這兩個值還可以設為GridBagConstraints.RELATIVE,這個值也是預設值,它表明當前元件緊跟在上一個元件之後。

gridwidht和gridheight:設定元件橫向縱向跨越多少個網格,他們的預設值都是1,如果該元件是橫向或縱向的最後一個還可以將此值設為GridBagConstraints.REMAINDER,若為倒數第二個元件則可以設值為GridBagConstraints.RELATIVE。

ipadx和ipady:設定元件橫向縱向的內部填充大小,即在元件的最小尺寸上還需要增大多少,若設定了這個值則元件在最小尺寸的基礎上增大ipadx*2或 ipady*2畫素。

weightx和weighty(double型別):就是權重,也就是元件元件佔領多餘空間的水平或垂直增加比例,預設值為0也就是不佔領多餘空間。例如有三個元件,我們將他們的水平增加比例分別設為1.0,2.0,3.0,當容器寬度增加60畫素時,他們分別增加10,20和30畫素。如果我們希望某個元件的大小會隨著容器的變化而變化,我們需要同時設定fill和weightx,weighty屬性。

最後我們還可以使用絕對定位:只需要將Container的佈局管理器設為null即可,也就是setLayout(null),往容器中加元件的時候指定元件的位置和大小。一般呼叫setBounds(int x,int y,int width,int height)。