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