布局管理器

  • BorderLayout
  • FlowLayout 流式布局
  • GridLayout



布局管理器


Swing 组件不能单独存在,必须放置于容器中,而组件在容器中的位置和尺寸是由布局管理器来决定的


Swing工具在AWT的基础上提供了8种布局管理器

名称

解释

BorderLayout

边缘布局管理器

BoxLayout

箱式布局管理器

CardLayout

卡片布局管理器

FlowLayout

流式布局管理器

GridBagLayout

网格包布局管理器

GridLayout

网格布局管理器

GroupLayout

分组布局管理器

SpringLayout

弹性布局管理器

BorderLayout

是一种较为复杂的布局方式,它将容器划分为5个区域,分别是页头,页尾,行首,行尾,中部,向BorderLayout布局管理器的容器中添加组件时,需要使用add(Component comp,Object constraints)方法,其中参数 comp 表示要添加的组件,constraints 指定将组件添加到布局中的位置,它是一个Object类型,在传参时可以使用BorderLayout类提供的五个常量设置组件位置,它们分别是:
PAGE_START
PAGE_END
LINE_START
LINE_END
CENTER

e.g:
import java.awt.*;
import javax.swing.*;
public class Gui {
		public static void main(String[]arge)
		{
		   Gui gui = new Gui();
		   gui.createGui();
		}
		private  void createGui()
		{
			 //创建并设置JFrame 容器窗口
			JFrame f = new JFrame("JFrameTest");
			f.setSize(500,500);
			f.setLocation(600, 300); // 设置窗体在界面出现的位置
			JButton but1 = new JButton("pag_start");
			JButton but2 = new JButton("pag_end");
			JButton but3 = new JButton("line_start");
			JButton but4 = new JButton("line_end");
			JButton but5 = new JButton("center");
			f.add(but1,BorderLayout.PAGE_START);
			f.add(but2,BorderLayout.PAGE_END);
			f.add(but3,BorderLayout.LINE_START);
			f.add(but4,BorderLayout.LINE_END);
			f.add(but5,BorderLayout.CENTER);
			f.setVisible(true);
			f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		}
}
上述表示方位的词也可用
NORTH
SOUTH
EAST
WEST
CENTER
替换

FlowLayout 流式布局

是最简单的布局管理器,在这种布局下,容器会将组件按照添加顺序从左到右放置,当到达容器的边界时,会自动将组件放到下一行的开始位置这些组件可以按左对齐,居中对齐(默认方式)或右对齐的方式排列。FlowLayout类有三个构造方法

名称

解释

FlowLayout()

默认居中对齐,水平,垂直间距默认为5个单位

FlowLayout(int align)

指定组件相对于容器的对齐方式,水平,垂直间距默认为5个单位

FlowLayout(int align, int hgap, int vgap)

指定组件的对齐方式和水平,垂直间距

参数align 决定组件在每行中相对于容器边界的对齐方式,分别为左对齐,右对齐,居中对齐,可以使用该类中提供的常量
FlowLayout.LEFT
FlowLayout.RIGHT
FlowLayout.CENTER
参数 hgap 和 参数 vgap 分别设定组件之间的水平和垂直间距,可以填入一个任意数值

e.g:
import java.awt.*;
import javax.swing.*;
public class Gui {
		public static void main(String[]arge)
		{
		   Gui gui = new Gui();
		   gui.createGui();
		}
		private  void createGui()
		{
			 //创建并设置JFrame 容器窗口
			JFrame f = new JFrame("FlowLayout");
			//所有组件左对齐,水平间距为20,垂直间距为30
			f.setLayout(new FlowLayout(FlowLayout.LEFT,20,30));
			f.setSize(500,500);
			f.setLocation(600, 300); // 设置窗体在界面出现的位置
			JButton but1 = new JButton("1");
			JButton but2 = new JButton("2");
			JButton but3 = new JButton("3");
			JButton but4 = new JButton("4");
			JButton but5 = new JButton("5");
			f.add(but1);
			f.add(but2);
			f.add(but3);
			f.add(but4);
			f.add(but5);
			f.setVisible(true);
			f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		}
}

GridLayout

使用纵横线将容器分成n行m列大小相等的网格,每个网格中可以添加一个组件,添加到容器中的组件首先放置在第1行第一列(左上角)的网格中然后在第一行的网格中从左到右依次放置其他组件,行满后,继续在下一行中从左到右来放置组件
三个构造方法:

名称

解释

GridLayout()

默认只有一行,每个组件占一列

GridLayout(int rows,int cols)

指定容器的行数和列数

GridLayout(int rows,int cols, int hgap, int vgap)

指定容器的行数和列数以及组件之间的水平,垂直间距

参数 rows 表示行数,cols代表列数,hgap 和 vgap 规定窗格之间水平和垂直方向的间距

e.g:
import java.awt.*;
import javax.swing.*;
public class Gui {
		public static void main(String[]arge)
		{
		   Gui gui = new Gui();
		   gui.createGui();
		}
		private  void createGui()
		{
			 //创建并设置JFrame 容器窗口
			JFrame f = new JFrame("FlowLayout");
			//所有组件左对齐,水平间距为20,垂直间距为30
			f.setLayout(new GridLayout(3,3));
			f.setSize(500,500);
			f.setLocation(600, 300); // 设置窗体在界面出现的位置
			JButton but1 = new JButton("1");
			JButton but2 = new JButton("2");
			JButton but3 = new JButton("3");
			JButton but4 = new JButton("4");
			JButton but5 = new JButton("5");
			f.add(but1);
			f.add(but2);
			f.add(but3);
			f.add(but4);
			f.add(but5);
			f.setVisible(true);
			f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		}
}