布局管理器主要包括:FlowLayout,BorderLayout,GridLayout,CardLayout,GridBagLayout
例3
1 import java.awt.*;
2 public class ExGui{
3 private Frame f;
4 private Button b1;
5 private Button b2;
6 public static void main(String args[]){
7 ExGui that = new ExGui();
8 that.go();
9 }
10 public void go(){
11 f = new Frame("GUI example");
12 f.setLayout(new FlowLayout());//設(shè)置布局管理器為FlowLayout
13 b1 = new Button("Press Me");//按鈕上顯示字符"Press Me"
14 b2 = new Button("Don't Press Me");
15 f.add(b1);
16 f.add(b2);
17 f.pack();//緊湊排列,其作用相當(dāng)于setSize(),即讓窗口盡量小,小到剛剛能夠包容住b1、b2兩個(gè)按鈕
18 f.setVisible(true);
19 }
20 }
21
運(yùn)行結(jié)果如下:

1. FlowLayout
FlowLayout 是Panel,Applet的缺省布局管理器。其組件的放置規(guī)律是從上到下、從左到右進(jìn)行放置,如果容器足夠?qū)挘谝粋€(gè)組件先添加到容器中第一行的最左邊,后續(xù)的組件依次添加到上一個(gè)組件的右邊,如果當(dāng)前行已放置不下該組件,則放置到下一行的最左邊。
構(gòu)造方法主要下面幾種:
FlowLayout(FlowLayout.RIGHT,20,40);
/*第一個(gè)參數(shù)表示組件的對齊方式,指組件在這一行中的位置是居中對齊、居右對齊還是居左對齊,第二個(gè)參數(shù)是組件之間的橫向間隔,第三個(gè)參數(shù)是組件之間的縱向間隔,單位是象素。*/
FlowLayout(FlowLayout.LEFT);
//居左對齊,橫向間隔和縱向間隔都是缺省值5個(gè)象素
FlowLayout();
//缺省的對齊方式居中對齊,橫向間隔和縱向間隔都是缺省值5個(gè)象素
例4
1 import java.awt.*;
2 public class myButtons{
3 public static void main(String args[])
4 {
5 Frame f = new Frame();
6 f.setLayout(new FlowLayout());
7 Button button1 = new Button("Ok");
8 Button button2 = new Button("Open");
9 Button button3 = new Button("Close");
10 f.add(button1);
11 f.add(button2);
12 f.add(button3);
13 f.setSize(300,100);
14 f.setVisible(true);
15 }
16 }
運(yùn)行結(jié)果如下:
當(dāng)容器的大小發(fā)生變化時(shí),用FlowLayout管理的組件會(huì)發(fā)生變化,其變化規(guī)律是:組件的大小不變,但是相對位置會(huì)發(fā)生變化。例如上圖中有三個(gè)按鈕都處于同一行,但是如果把該窗口變窄,窄到剛好能夠放下一個(gè)按鈕,則第二個(gè)按鈕將折到第二行,第三個(gè)按鈕將折到第三行。按鈕"Open"本來在按鈕"OK"的右邊,但是現(xiàn)在跑到了下面,所以說"組件的大小不變,但是相對位置會(huì)發(fā)生變化"。
2. BorderLayout
BorderLayout 是Window,F(xiàn)rame和Dialog的缺省布局管理器。BorderLayout布局管理器把容器分成5個(gè)區(qū)域:North,South,East,West和Center,每個(gè)區(qū)域只能放置一個(gè)組件。各個(gè)區(qū)域的位置及大小如下圖所示:

例5
1 import java.awt.*;
2 public class buttonDir{
3 public static void main(String args[]){
4 Frame f = new Frame("BorderLayout");
5 f.setLayout(new BorderLayout());
6 f.add("North", new Button("North"));//第一個(gè)參數(shù)表示把按鈕添加到容器的North區(qū)域
7 f.add("South", new Button("South"));//第一個(gè)參數(shù)表示把按鈕添加到容器的South區(qū)域
8 f.add("East", new Button("East"));//第一個(gè)參數(shù)表示把按鈕添加到容器的East區(qū)域
9 f.add("West", new Button("West"));//第一個(gè)參數(shù)表示把按鈕添加到容器的West區(qū)域
10 f.add("Center", new Button("Center"));//第一個(gè)參數(shù)表示把按鈕添加到容器的Center區(qū)域
11 f.setSize(200,200);
12 f.setVisible(true);
13 }
14 }
運(yùn)行結(jié)果如下:

在使用BorderLayout的時(shí)候,如果容器的大小發(fā)生變化,其變化規(guī)律為:組件的相對位置不變,大小發(fā)生變化。例如容器變高了,則North、South區(qū)域不變,West、Center、East區(qū)域變高;如果容器變寬了,West、East區(qū)域不變,North、Center、South區(qū)域變寬。不一定所有的區(qū)域都有組件,如果四周的區(qū)域(West、East、North、South區(qū)域)沒有組件,則由Center區(qū)域去補(bǔ)充,但是如果Center區(qū)域沒有組件,則保持空白,其效果如下幾幅圖所示:

North區(qū)域缺少組

North和Center區(qū)域缺少組件
3. GridLayout
使容器中各個(gè)組件呈網(wǎng)格狀布局,平均占據(jù)容器的空間。
1 import java.awt.*;
2 public class buttonGrid {
3 public static void main(String args[]){
4 Frame f = new Frame("GridLayout");
5 f.setLayout(new GridLayout(3,2));//容器平均分成3行2列共6格
6 f.add(new Button("1")); //添加到第一行的第一格
7 f.add(new Button("2")); //添加到第一行的下一格
8 f.add(new Button("3")); //添加到第二行的第一格
9 f.add(new Button("4")); //添加到第二行的下一格
10 f.add(new Button("5")); //添加到第三行的第一格
11 f.add(new Button("6")); //添加到第三行的下一格
12 f.setSize(200,200);
13 f.setVisible(true);
14 }
15 }
運(yùn)行結(jié)果如下:
