布局管理器
容器内可以存放各种组件,而组件的位置和大小是由容器内的布局管理器来决定的。在AWT中为我们提供了以下5种布局管理器:
① FlowLayout 流式布局管理器
② BorderLayout 边界布局管理器
③ GridLayout 网格布局管理器
④ CradLayout 卡片布局管理器
⑤ GridBagLayout 网格包布局管理器
容器中组件的布局通常由布局管理器控制。每个Container(比如一个Panel或一个Frame)都有一个与他相关的缺省布局管理器,Panel容器默认的是FlowLayout,Frame容器默认的是BorderLayout,我们可以通过调用setLayout()来改变布局管理器;
可以通过设置空布局管理器,来控制组件的大小金和位置。可以调用setLayout(null)。
在设置空布局管理器后,必须对所有的组件调用setLocation(),setSize()或setBounds(),将它们定位在容器中。
流式布局管理器
1 class MyFrame3 extends Frame {
2 public MyFrame3(String title) {
3 super(title);
4 }
5
6 public void init() {
7 FlowLayout layout=new FlowLayout(FlowLayout.LEFT);//设置左对齐
8 this.setLayout(layout);
9 this.setBackground(Color.CYAN);
10 this.add(new Button("btn1"));
11 this.add(new Button("btn2"));
12 this.add(new Button("btn3"));
13 this.add(new Button("btn4"));
14 this.add(new Button("btn5"));
15 this.add(new Button("btn6"));
16 this.add(new Button("btn7"));
17 this.add(new Button("btn8"));
18 this.setSize(300, 300);
19 this.setVisible(true);
20 }
21 }
边界布局管理器
1 class MyFrame4 extends Frame {
2 public MyFrame4(String title) {
3 super(title);
4 }
5
6 public void init() {
7 this.setBackground(Color.CYAN);
8 this.add(new Button("btn1"),BorderLayout.EAST);
9 this.add(new Button("btn2"),BorderLayout.WEST);
10 this.add(new Button("btn3"),BorderLayout.NORTH);
11 this.add(new Button("btn4"),BorderLayout.SOUTH);
12 this.add(new Button("btn5"),BorderLayout.CENTER);
13 this.setSize(300, 300);
14 this.setVisible(true);
15 }
16 }
网格布局管理器
1 class MyFrame5 extends Frame {
2 public MyFrame5(String title) {
3 super(title);
4 }
5
6 public void init() {
7 GridLayout layout=new GridLayout(3,2);//创建一个3行2列的网格
8 this.setLayout(layout);
9 this.setBackground(Color.CYAN);
10 this.add(new Button("btn1"));
11 this.add(new Button("btn2"));
12 this.add(new Button("btn3"));
13 this.add(new Button("btn4"));
14 this.add(new Button("btn5"));
15 this.setSize(300, 300);
16 this.setVisible(true);
17 }
18 }
卡片布局管理器
1 class MyFrame6 extends Frame {
2 private Panel cardPanel=null;
3 private Panel ctrolPanel=null;
4 private CardLayout cardLayout=null;
5 private FlowLayout flowLayout=null;
6 private Label lb1,lb2,lb3,lb4;
7 private Button btnFirst,btnPrevious,btnNext,btnLast;
8 private TextField txtContent;
9 public MyFrame6(String title) {
10 super(title);
11 }
12
13 public void init() {
14 //创建2个面板容器
15 cardPanel=new Panel();
16 ctrolPanel=new Panel();
17
18 //创建2个布局管理器
19 cardLayout=new CardLayout();
20 flowLayout=new FlowLayout();
21
22 //给容器设置指定的布局管理器
23 cardPanel.setLayout(cardLayout);//卡片容器中放置卡片布局
24 ctrolPanel.setLayout(flowLayout);//控制容器放置流式布局
25
26 //声明创建4个标签控件和一个文本框控件
27 lb1=new Label("第一页内容",Label.CENTER);
28 lb2=new Label("第二页内容",Label.CENTER);
29 txtContent=new TextField();//编辑文本框
30 lb3=new Label("第四页内容",Label.CENTER);
31 lb4=new Label("第五页内容",Label.CENTER);
32
33 //构建四个按钮对象
34 btnFirst=new Button("第一张");
35 btnPrevious=new Button("上一张");
36 btnNext=new Button("下一张");
37 btnLast=new Button("最后一张");
38 ctrolPanel.add(btnFirst);
39 ctrolPanel.add(btnPrevious);
40 ctrolPanel.add(btnNext);
41 ctrolPanel.add(btnLast);
42
43 //把四个标签控件和一个文本框控件添加到卡片容器中
44 cardPanel.add(lb1);
45 cardPanel.add(lb2);
46 cardPanel.add(txtContent);
47 cardPanel.add(lb3);
48 cardPanel.add(lb4);
49 this.add(cardPanel,BorderLayout.CENTER);//将卡片容器放在中部
50 this.add(ctrolPanel,BorderLayout.SOUTH);//将控制容器放在南部
51 this.setSize(400, 300);
52 this.setVisible(true);
53 }
54 }
按钮事件的实现请查看下一篇...