组件在容器(比如Jframe)中的位置和大小是由布局管理器来决定的。所有的容器都会使用一个布局管理器,通过它来自动进行组件的布局管理。
种类
java共提供了五种布局管理器,只介绍三种是最常见的布局管理器。
边界布局BorderLayout
边界布局将容器简单的划分为东南西北中5个区域,中间区域最大。JFrame、JDialog默认布局就是BorderLayout。
1 /*
2 * 作者:白客C
3 * 时间:2020年03月05日
4 * 内容:gui窗体
5 * 步骤:
6 * 1.继承JFrame
7 * 2.定义你需要的组件
8 * 3.创建组件
9 * 4.添加组件
10 * 5.对窗体设置
11 */
12
13 package com.beekc.www;
14 import java.awt.*;
15 import javax.swing.*;
16
17 //继承JFrame
18 public class Beekc extends JFrame{
19 //定义需要的组件
20 JButton jb1,jb2,jb3,jb4,jb5;
21
22 public static void main(String[] args){
23 Beekc beekc = new Beekc();
24 }
25
26 //构造函数
27 public Beekc(){
28 //创建组件
29 jb1 = new JButton("中部");
30 jb2 = new JButton("北部");
31 jb3 = new JButton("东部");
32 jb4 = new JButton("南部");
33 jb5 = new JButton("西部");
34
35 //添加各个组件
36 this.add(jb1,BorderLayout.CENTER);
37 this.add(jb2,BorderLayout.NORTH);
38 this.add(jb3,BorderLayout.EAST);
39 this.add(jb4,BorderLayout.SOUTH);
40 this.add(jb5,BorderLayout.WEST);
41
42 //设置窗体属性
43 //设置窗口标题
44 this.setTitle("边界布局案例");
45 //设置窗口大小
46 this.setSize(300,200);
47 //设置窗体打开的初始位置
48 this.setLocation(200,200);
49 //一定要设置关闭窗口时一定要关闭程序
50 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
51
52 //显示窗体
53 this.setVisible(true);
54
55
56
57 }
58
59 }
运行结果
要是没设置北部或南部,西部、中部、南部就会占取位置;
要是没设置西部、东部,中部就会占取位置;
要是没设置中部,中部是空的;
流式布局FlowLayout
FlowLayout布局,按照组件的添加次序将按按钮组件(当然也可以是别的组件)从左到右放置在容器的边界时,组件将放置在下一行中,FlowLayout可以左对齐、剧中、右对齐的方式排列组件。
注意事项
Ⅰ.不限制他所管理的组件大小,允许他们有最佳大小
Ⅱ.当容器被缩放时,组件的位置可能变化,但组件的大小不变
Ⅲ.默认组件是居中对齐,可以通过FlowLayout(int align) 函数来指定对齐方式
1 /*
2 * 作者:白客C
3 * 时间:2020年03月05日
4 * 内容:gui窗体
5 * 步骤:
6 * 1.继承JFrame容器
7 * 2.定义你需要的组件
8 * 3.创建组件
9 * 4.添加组件
10 * 5.对窗体设置
11 * 6.显示
12 */
13
14 package com.beekc.www;
15 import java.awt.*;
16 import javax.swing.*;
17
18 //继承JFrame
19 public class Beekc extends JFrame{
20
21 //定义组件
22 JButton jb1,jb2,jb3,jb4,jb5,jb6;
23
24 public static void main(String[] args){
25 Beekc beekc = new Beekc();
26 }
27
28 //构造函数
29 public Beekc(){
30 //创建组件
31 jb1 = new JButton("苹果");
32 jb2 = new JButton("香蕉");
33 jb3 = new JButton("榴莲");
34 jb4 = new JButton("菠萝");
35 jb5 = new JButton("西瓜");
36 jb6 = new JButton("梨子");
37
38 //添加组件
39 this.add(jb1);
40 this.add(jb2);
41 this.add(jb3);
42 this.add(jb4);
43 this.add(jb5);
44 this.add(jb6);
45
46 //设置布局管理器
47 //FlowLayout.CENTER 居中对齐
48 this.setLayout(new FlowLayout(FlowLayout.CENTER));
49
50 //设置窗体
51 this.setTitle("流式布局案例");
52 this.setSize(300,110);
53 //禁止用户改变窗体大小
54 this.setResizable(false);
55 this.setLocation(200,200);
56 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
57
58 //显示窗体
59 this.setVisible(true);
60 }
61
62 }
运行结果
网格布局GridLayout
GirdLayout布局就是将容器分割成多行多列,组件被填充到每个网格中,添加到容器的组件首先放置在左上角的网格中,然后从左到右放置其它的组件,当占满该行的所有网格后,接着继续在下一行从左到右放置组件。
1 /*
2 * 作者:白客C
3 * 时间:2020年03月05日
4 * 内容:gui窗体
5 * 步骤:
6 * 1.继承JFrame容器
7 * 2.定义你需要的组件
8 * 3.创建组件
9 * 4.添加组件
10 * 5.对窗体设置
11 * 6.显示
12 */
13
14 package com.beekc.www;
15 import java.awt.*;
16 import javax.swing.*;
17
18 //继承JFrame
19 public class Beekc extends JFrame{
20
21 //定义组件
22 int size = 9;
23 JButton[] jb = new JButton[size];
24
25
26 public static void main(String[] args){
27 Beekc beekc = new Beekc();
28 }
29
30 //构造函数
31 public Beekc(){
32 //创建组件
33 for(int i = 0 ; i < size ; i++)
34 {
35 jb[i] = new JButton(String.valueOf(i+1));
36 }
37
38 //设置网格布局
39 this.setLayout(new GridLayout(3,3,10,10));
40
41 //添加组件
42 for(int i = 0 ; i < size ; i++)
43 {
44 this.add(jb[i]);
45 }
46
47 //设置窗体
48 this.setTitle("网格布局案例");
49 this.setSize(300,300);
50 this.setResizable(false);
51 this.setLocation(200,200);
52 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
53
54 //显示
55 this.setVisible(true);
56 }
57
58 }
运行结果