“黑馬程序員”佈局管理器

 ------- <a href="http://www.itheima.com" target="blank">android培訓</a>、<a href="http://www.itheima.com" target="blank">java培訓</a>、期待與您交流! ----------

佈局管理器

當一個窗口中的組件較多時,界面應該簡潔整齊,佈局合理。Java採用佈局管理器對容器中的組件進行相對佈局,當改變容器大小時,或者改變組件的大小,或者改變組件之間的相對位置,保證組件不會被覆蓋並且容器沒有空白區域。

Java提供多種風格和特點的佈局管理器,每一種佈局管理器指定一種組件之間的相對位置。Java.awt中的佈局管理器類主要有:FlowLayout、BorderLayout和GridLayout。

佈局是容器類的特性,每種容器都有一中默認佈局。Window窗口類的默認佈局管理器是BorderLayout,Panel面板類的默認佈局是FlowLayout。如果一個容器需要改變其默認佈局管理器,可以調用Container容器類的FlowLayout()方法。

1、  FlowLayout流佈局管理器

FlowLayout佈局管理器提供按行佈置組件方式,將組件按從左到右順序、一行一行地排列,當一行放滿時再放置下一行。組件保持自己的尺寸,容器中一行的寬度隨容器的寬度而變化。當改變容器大小時,組件的相對位置隨容器大小而變化,將呈現一行或多行。

FlowLayout類的部分聲明如下:

public class FlowLayout implements LayoutManager.jaca.io.Serializable{

       public static final int LEFT=0;                    //左對齊

       public static final int CENTER=1;                  // 居中

       public static final int RIGHT=2;                   //右對齊

       public FlowLayout()                                //構造方法,默認居中

       public FlowLayout(int align)                       //align參數指定對齊方式

       public FlowLayout(int align,int hgap,int vgap)     //hgap、vgap指定組件間的水平和垂直間距

}

2、  BorderLayout邊界佈局管理器

BorderLayout佈局管理器將容器劃分爲五個區域,東、南、西、北四條邊和中間,組件佔滿一條邊或中間部分。當改變容器大小時,四邊組件的長度或寬度不變,中間組件的長度和寬度隨着容器大小而變化。

BorderLayout類的部分聲明如下:

public class BorderLayout implements LayoutManager2,java.io.Serializable{

       public static final String NORTH="North";

       public static final String SOUTH="South";

       public static final String EAST="East";

       public static final String WEST="West";

       public static final String CENTER="Center";

       public BorderLayout()                           //構造方法,組件之間的間距爲0像素

       public BorderLayout(int hgap,int vgap)          //參數指定組件之間的水平和垂直間距(像素)

}

Container類爲BorderLayout佈局提供以下添加組件的方法:

public void add(Component comp,Object constraints)

其中,constrains參數指定組件添加到BorderLayout佈局容器的位置,取值爲BordetLayout類的常量,如BorderLayout.EAST或“South”。例如,下列語句將5個按鈕一次放置在框架的5個區域中:

Frame frame =new Frame();

frame.add(new Button("東"),BorderLayout.EAST);

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

frame.add(new Button("西"),"West");

frame.add(new Button("北"),"North");

frame.add(new Button("中"),BorderLayout.CENTER);    //可以省略爲this.add(new Button("中"));

當constraints參數取值爲BorderLayout.CENTER時,參數可以省略。如果將多個組件放置在同一個區域,則後放置組件將覆蓋先放置的組件。

3、  GridLayout網格佈局管理器

GridLayout佈局管理器將容器劃分爲大小相等的若干行乘若干列的網格,組件從左至右,從上至下一次放入網格中。組件大小隨容器大小而變化。如果組件數多於網格數,Java將自動增加網格;反之,一些網格將空置。

GridLayout類的部分聲明如下:

public class GridLayout implements LayoutManager,java.io.Serializable{

       public GridLayout()

       public GridLayout(int rows,int cols)

       public GridLayout(int rows,int cols,int hgap,int vgap)

}

GridLayout佈局的組件放置次序是行優先,從第一行開始,從左至右依次放置,一行放滿後自動轉入下一行。如果組件數超過網格數,則佈局管理器會自動增加網格數,增加的原則是保持行數不變。如果需要在指定位置放置組件,則可調用Container類爲GridLayout佈局提供以下方法:

public Component add(Component comp,int index)

例如:

Frame frame=new Frame();

frame.setLayout(new GridLayout(3,2));        //設置3行2列的網格佈局

frame.add(new Button("botton1"));            //依次添加組件

frame.add(new Button("botton2"),0);          //將組件插入在指定位置

流式佈局管理器

一、佈局管理器所屬類包

所屬類包

佈局管理器名稱

說明

Java.awt

FlowLayout(流式佈局)

組件按照加入的先後順序按照設置的對齊方式從左向右排列,一行排滿到下一行開始繼續排列

BorderLayout(邊界佈局)

容器劃分爲東、西、南、北、中五個區域,每個區域只能放置一個組件。

GridLayout(網格佈局)

容器的空間劃分成M×N列的網格區域, 每個區域只能放置一個組件。

CardLayout(卡片佈局)

如同一疊牌,每個牌對應一個組件,但每次只能顯示其中的一張牌。適用於在一個空間中防止多個組件的情況

GridBagLayout(網格包佈局)

GridLayout的升級版,組件仍然是按照行、列放置,但是每個組件可以佔據多個網格

Java.swing

BoxLayout(箱式佈局)

允許在容器中縱向或者橫向防止多個控件

SprigLayout(彈簧佈局)

根據一組約束條件放置控件

空佈局

不使用佈局管理器,按照控件自身提供的大小、位置信息放置控件

邊界佈局管理器

列如圖:

邊界佈局管理器 - C-Kalan -

BorderLayout佈局管理器將容器劃分爲五個區域,東、南、西、北四條邊和中間,組件佔滿一條邊或中間部分。當改變容器大小時,四邊組件的長度或寬度不變,中間組件的長度和寬度隨着容器大小而變化。

BorderLayout類的部分聲明如下:

public class BorderLayout implements LayoutManager2,java.io.Serializable{

       public static final String NORTH="North";

       public static final String SOUTH="South";

       public static final String EAST="East";

       public static final String WEST="West";

       public static final String CENTER="Center";

       public BorderLayout()                           //構造方法,組件之間的間距爲0像素

       public BorderLayout(int hgap,int vgap)          //參數指定組件之間的水平和垂直間距(像素)

}

Container類爲BorderLayout佈局提供以下添加組件的方法:

public void add(Component comp,Object constraints)

其中,constrains參數指定組件添加到BorderLayout佈局容器的位置,取值爲BordetLayout類的常量,如BorderLayout.EAST或“South”。例如,下列語句將5個按鈕一次放置在框架的5個區域中:

Frame frame =new Frame();

frame.add(new Button("東"),BorderLayout.EAST);

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

frame.add(new Button("西"),"West");

frame.add(new Button("北"),"North");

frame.add(new Button("中"),BorderLayout.CENTER);    //可以省略爲this.add(new Button("中"));

當constraints參數取值爲BorderLayout.CENTER時,參數可以省略。如果將多個組件放置在同一個區域,則後放置組件將覆蓋先放置的組件

網格佈局管理器

GridLayout佈局管理器將容器劃分爲大小相等的若干行乘若干列的網格,組件從左至右,從上至下一次放入網格中。組件大小隨容器大小而變化。如果組件數多於網格數,Java將自動增加網格;反之,一些網格將空置。

GridLayout類的部分聲明如下:

public class GridLayout implements LayoutManager,java.io.Serializable{

       public GridLayout()

       public GridLayout(int rows,int cols)

       public GridLayout(int rows,int cols,int hgap,int vgap)

}

GridLayout佈局的組件放置次序是行優先,從第一行開始,從左至右依次放置,一行放滿後自動轉入下一行。如果組件數超過網格數,則佈局管理器會自動增加網格數,增加的原則是保持行數不變。如果需要在指定位置放置組件,則可調用Container類爲GridLayout佈局提供以下方法:

public Component add(Component comp,int index)

例如:

Frame frame=new Frame();

frame.setLayout(new GridLayout(3,2));        //設置3行2列的網格佈局

frame.add(new Button("botton1"));            //依次添加組件

frame.add(new Button("botton2"),0);          //將組件插入在指定位置

卡片佈局管理器

Card佈局管理器把用戶接口看成是一系列的卡片,某一時刻只有一張是可見的。可以使用add()方法把卡片加到Card Layout中,然後使用CardLayout類中的first()next()等方法根據需要切換到新的卡片。有興趣的同學可自己查看參考書。

GridBag Layout Manager(網格包佈局管理器)  

GridBag佈局管理器可以比較精確地控制Container中component的位置和大小,但它非常複雜,不太實用,這裏就不作介紹了。

什麼時候用?
Frame及其子類默認boarderLayout,Panel及其子類默認的是流式管理器
如果你不用佈局管理器的話就用setLayout(null);取消佈局管理器
一般編程中都是不常用佈局管理器的 都是用的絕對定位
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章