Swing组件不能单独存在,必须放置于容器当中,组件在容器中的位置和尺寸是由布局管理器来决定的。
Swing提供了8种布局管理器,分别是BorderLayout(边界布局管理器),BoxLayout(箱式布局管理器),CardLayout(卡片布局管理器),FlowLayout(流式布局管理器),GridBagLayout(网格包布局管理器),GridLayout(网格布局管理器),GroupLayout(分组布局管理器)和SpringLayout(弹性布局管理器)。
1.BorderLayout
它将容器划分为5个区域,页头(PAGE_START),页尾(PAGE_END),行首(LINE_START),行尾(LINE_END),中部(CENTER)
import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class Example03 {
private static void CreateAndShowGUI() {
//创建一个名为BorderLayout的顶级容器窗口
JFrame f=new JFrame("BoderLayout");
///设置窗体中布局管理器为Borderlayout
f.setLayout(new BorderLayout());
f.setSize(300,300);//设置窗体大小
f.setLocation(300,200);//设置窗体显示位置
//创建5个按钮组件
JButton bu1=new JButton("PAGE_START");
JButton bu2=new JButton("PAGE_END");
JButton bu3=new JButton("LINE_START");
JButton bu4=new JButton("LINE_END");
JButton bu5=new JButton("CENTER");
//将创建的按钮添加至容器中,并设置按钮所在的区域
f.add(bu1,BorderLayout.PAGE_START);
f.add(bu2,BorderLayout.PAGE_END);
f.add(bu3,BorderLayout.LINE_START);
f.add(bu4,BorderLayout.LINE_END);
f.add(bu5,BorderLayout.CENTER);
f.setVisible(true);//设置窗体可见
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(Example03::CreateAndShowGUI);
}
}
结果如:
JFrame默认使用BorderLayout布局管理器。使用BorderLayout布局管理器时,如果不指定添加到哪一个区域时,默认CENTER区域,并且每一个区域只能放置一个组件,向一个区域添加多个组件时,后放入的组件会覆盖先放入的组件。
2.FlowLayout
流式布局管理器,容器会将组件按照添加顺序从左向右放置,当到达容器边界时,会自动将组件放到下一行的开始位置。这些组件可以按左对齐,按右对齐,居中对齐(默认方式)排列。
FlowLayout类的三个构造方法。
方法声明 功能描述
FlowLayout() 组件默认居中对齐,水平、垂直间距默认为5个单位
FlowLayout(int align) 指定组件相对于容器的对齐方式,水平,垂直间距默认为5个单位
FlowLayout(int align,int hgap,int vgap) 指定组件的对齐方式和水平,垂直间距。
align的常量:FlowLayout.LEFT、FlowLayout.RIGHT、FlowLayout.CENTER.
hgap(水平),cgap(垂直)组件之间的距离。
import java.awt.Button;
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class Example04 {
private static void createAndShowGUI() {
//创建一个名为FlowLayout的窗体
JFrame F=new JFrame("FlowLayout");
//设置窗体中布局管理器为:FlowLayout,
//所有组件左对齐,水平间距为20,垂直间距为30
F.setLayout(new FlowLayout(FlowLayout.LEFT,20,30));
F.setSize(400,200);//设置窗体大小
F.setLocation(300,200);//设置窗体显示位置
//向容器加入组件
F.add(new Button("第1个按钮"));
F.add(new Button("第2个按钮"));
F.add(new Button("第3个按钮"));
F.add(new Button("第4个按钮"));
F.add(new Button("第5个按钮"));
F.setVisible(true);//设置窗体可见
F.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(Example04::createAndShowGUI);
}
}
结果:
3.GridLayout
网格布局管理器使用纵横线将容器分成n行m列大小相等的网格,每个网格中可以添加一个组件。首先放在第一行第一列依次从左向右放置其他组件,行满后,继续从下一行中从左向右放置。组件自动占满整个网格。GridLayout类又三个构造方法。
方法声明 功能描述
GridLayout() 默认只有一行,每个组件占一列
GridLayout(int rows,int cols) 指定容器的行数和列数
GridLayout(int rows,int cols,int hgap,int vgap) 指定容器的行数和列数以及组件之间的水平、垂直间距
import java.awt.Button;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class Example05 {
private static void createAndShowGUI() {
//创建一个名为GridLayout的窗体
JFrame f=new JFrame("GridLayout");
f.setLayout(new GridLayout(3,3));//设置窗体为3*3的网格
f.setSize(300,300);//设置窗体大小
f.setLocation(400, 300);//设置窗体显示位置
//循环添加8个按钮到GridLayout容器中
for(int i=1;i<9;i++) {
Button btn=new Button("btu"+i);
f.add(btn);
}
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(Example05::createAndShowGUI);
}
}
结果: