介绍:
概念:组件在容器(比如JFrame)中的位置和大小是由布局管理器来决定的(相当于CSS)。所有的容器都会使用一个布局管理器,通过它来自动进行组件的布局管理
种类:java中布局管理器有20多种(想知道的去查API),常见的有以下5种:
- 流式布局管理器(FlowLayout)
- 边界布局管理器(BorderLayout)
- 网络布局管理器(GridLayout)
- 卡片布局管理器(CardLayout)
- 网格包布局管理器(GridBagLayout)
边界布局(BorderLayout)
边界布局将容器简单的分为东西南北中5个区域,中间区域最大
代码:
package Demo8_1;
import java.awt.*;
import javax.swing.*;
public class Demo8_2 extends JFrame{
//定义组件
JButton jb1,jb2,jb3,jb4,jb5;
public static void main(String[] args) {
Demo8_2 demo8_2 = new Demo8_2();
}
public Demo8_2(){
//创建组件
jb1 = new JButton("中部");
jb2 = new JButton("北部");
jb3 = new JButton("东部");
jb4 = new JButton("南部");
jb5 = new JButton("西部");
//添加各个组件
this.add(jb1,BorderLayout.CENTER);
this.add(jb2,BorderLayout.NORTH);
this.add(jb3,BorderLayout.EAST);
this.add(jb4, BorderLayout.SOUTH);
this.add(jb5,BorderLayout.WEST);
//设置窗体属性
this.setTitle("边界布局案例");
this.setSize(300, 200);
this.setLocation(200,200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//显示窗体
this.setVisible(true);
}
}
注意:
1.不是五个部分都必须添加
2.中部组件会自动的调节大小(如果中部缺省,默认会空出来)
3.JFrame窗体,JDialog对话框组件默认布局方法
流式布局(FlowLayout)
流式布局,按照组件的添加次序将 组件 从左到右放置在容器中,当到达容器的边界时,组件会放置在下一行。
FlowLayout可以以<b>左对齐,居中对齐,右对齐</b>的方式排列组件
代码:
import java.awt.*;
import javax.swing.*;
public class Demo8_3 extends JFrame{
//定义组件
JButton jb[];
FlowLayout fl;
public static void main(String[] args) {
Demo8_3 demo8_3 = new Demo8_3();
}
//构造函数
public Demo8_3(){
//创建组件
FlowLayout fl = new FlowLayout();
JButton jb[] = new JButton[8];
for(int i=0;i<8;i++)
jb[i] = new JButton("按钮"+i);
//添加组件
for(int i=0;i<8;i++)
this.add(jb[i]);
//设置窗体的布局管理器
this.setLayout(fl);
//设置流式布局管理器的对其方式
fl.setAlignment(FlowLayout.RIGHT);
//设置窗体属性
this.setTitle("流式布局案例");
this.setSize(400,300);
this.setLocation(200,200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setResizable(false); //禁止用户改变窗体大小
//显示窗体
this.setVisible(true);
}
}
注意:
1.改变布局管理器:setLayout(new 布局管理器(布局管理器的参数));
eg: this.setLayout(new FlowLayout(FlowLayout.LEFT))
(将布局管理器改为流式布局管理器,并且显示的方式是左对齐)2.默认是居中对齐(FlowLayout.CENTER),可以通过 构造函数FlowLayout(int align)函数 或者 setAlignment(int align)函数 来制定对齐方式
- 五个参数值及含义如下:
- 0或FlowLayout.lEFT ,控件左对齐
- 1或FlowLayout.CENTER ,居中对齐
- 2或FlowLayout.RIGHT ,右对齐
- 3或FlowLayout.LEADING,控件与容器方向开始边对应
- 4或FlowLayout.TRAILING,控件与容器方向结束边对应
- 如果是0、1、2、3、4之外的整数,则为左对齐
3.只要组件被添加到布局管理器中,那么组件的大小将交给布局管理器管理,自身的设置将失效
4.当容器被缩放时,组件的位置可能发生变化,但是大小不会变(可以通过容器的setResizable(false)方法来设置不允许用户改变大小)
网格布局(GridLayout)
GirdLayout布局:将容器分为多行多列,组件被填充到每个网格中,添加到容器的组件会先放置在左上角的网格中,然后从左往右放置其他组件,当占满该行的所有网格后,接着继续在下一行从左往右放置组件
最常见的例子就是做一个计算器
代码:
package Demo8_1;
import java.awt.*;
import javax.swing.*;
public class Demo8_4 extends JFrame{
//定义组件
JButton jbs[] = null;
public static void main(String[] args) {
Demo8_4 demo8_4= new Demo8_4();
}
//构造函数
public Demo8_4(){
jbs = new JButton[9];
//创建组件
for(int i=0;i<9;i++)
jbs[i] = new JButton("按钮"+i);
//添加组件
for(int i=0;i<9;i++)
this.add(jbs[i]);
//设置布局类型
this.setLayout(new GridLayout(3,3,1,10)); //网格为3行3列 ,每行的组件相距为1,行与行之间的距离为10
//设置容器属性
this.setTitle("网格布局");
this.setSize(400,300);
this.setLocation(200,200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setResizable(false);
//显示容器
this.setVisible(true);
}
}
注意:
1.所有的组件的大小都是相同的
2.可以通过GridLayout(int rows,int cols,int hgap,int vgap)来指定网格的行/列,水平间隙/垂直间隙