------- <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(彈簧佈局) | 根據一組約束條件放置控件 | |
無 | 空佈局 | 不使用佈局管理器,按照控件自身提供的大小、位置信息放置控件 |
邊界佈局管理器
列如圖:
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);取消佈局管理器
一般編程中都是不常用佈局管理器的 都是用的絕對定位