组件在容器(比如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 }

 

运行结果

要是没设置北部或南部,西部、中部、南部就会占取位置;

要是没设置西部、东部,中部就会占取位置;

要是没设置中部,中部是空的;

java swing布局管理器 swing新增的布局管理器_java

 

流式布局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 }

运行结果

java swing布局管理器 swing新增的布局管理器_java_02

 

网格布局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 }

 

运行结果

java swing布局管理器 swing新增的布局管理器_java_03