概要
- 在向容器中添加组件时,需要考虑组件的大小和位置。如果不使用布局管理器,则需要先在纸上画好各个组件的位置并计算组件间的距离,再向容器中添加,这样虽然可以控制组件的位置,实现起来却十分麻烦。
- 为此java提供了6种布局管理器,可以将组件进行统一管理,没有布局管理器都实现LayoutManager接口
边框布局管理器
- BorderLayout(边框布局管理器)是 Window、JFrame 和 JDialog 的默认布局管理器
- 边框布局管理器将窗口分为 5 个区域:North、South、East、West 和 Center边框布局管理器将窗口分为 5 个区域:North、South、East、West 和 Center
- North 表示北,将占据面板的上方;South 表示南,将占据面板的下方;East表示东,将占据面板的右侧;West 表示西,将占据面板的左侧;中间区域 Center 是在东、南、西、北都填满后剩下的区域
边框布局管理器
注意
边框布局管理器并不要求所有区域都必须有组件,如果四周的区域(North、South、East 和 West 区域)没有组件,则由 Center 区域去补充。如果单个区域中添加的不只一个组件,那么后来添加的组件将覆盖原来的组件,所以,区域中只显示最后添加的一个组件
BorderLayout构造方法
- BorderLayout():创建一个Border布局,组件之间没有间隙
- BorderLayout(int hgap,int vgap):创建一个Border布局,其中hgap表示组件之间的横向间隔,vgap表示组件之间的纵向间隔,单位是像素
BorderLayout类成员变量
- 容器调用Container类的add()方法添加组件时可以设置此组件在边界布局管理器中的区域,区域的控制可以由BorderLayout类的成员变量来控制
- BorderLayout.NORTH:在容器中添加组件时,组件置于顶端
- BorderLayout.SOUTH:在容器中添加组件时,组件置于底端
- BorderLayout.EAST:在容器中添加组件时,组件置于右端
- BorderLayout.WEST:在容器中添加组件时,组件置于左端
- BorderLayout.CENTER:在容器中添加组件时,组件置于中间开始填充,直到与其它组件边界连接
Container方法
public Component add(String name, Component comp) {
addImpl(comp, name, -1);
return comp;
}
- 通过add方法添加组件,设置布局
Demo01
import javax.swing.*;
import java.awt.*;
public class Demo09 {
public static void main(String[] args) {
//创建JFrame类对象
JFrame jFrame = new JFrame("边框父窗体");
//获取一个容器
Container container = jFrame.getContentPane();
//设置窗体大小
BorderLayout borderLayout = new BorderLayout();
//设置JFRame窗体的布局格式
jFrame.setLayout(borderLayout);
JButton button1 = new JButton("NORTH");
JButton button2 = new JButton("SOUTH");
JButton button3 = new JButton("CENTER");
JButton button4 = new JButton("WEST");
JButton button5 = new JButton("EAST");
container.add(BorderLayout.NORTH,button1);
container.add(BorderLayout.SOUTH,button2);
container.add(BorderLayout.CENTER,button3);
container.add(BorderLayout.WEST,button4);
container.add(BorderLayout.EAST,button5);
// jFrame.add(button1,BorderLayout.SOUTH);
jFrame.setSize(400,400);
//设置窗体可见
jFrame.setVisible(true);
//设置窗体关闭方式
jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
//创建边框布局管理器类对象
}
}
Demo01运行效果如下
Demo02
import javax.swing.*;
import java.awt.*;
public class Demo09 {
public static void main(String[] args) {
//创建JFrame类对象
JFrame jFrame = new JFrame("边框父窗体");
//获取一个容器
Container container = jFrame.getContentPane();
//设置窗体大小
BorderLayout borderLayout = new BorderLayout();
//设置JFRame窗体的布局格式
jFrame.setLayout(borderLayout);
JButton button1 = new JButton("NORTH");
//JButton button2 = new JButton("SOUTH");
JButton button3 = new JButton("CENTER");
JButton button4 = new JButton("WEST");
JButton button5 = new JButton("EAST");
container.add(BorderLayout.NORTH,button1);
container.add(BorderLayout.SOUTH,button2);
container.add(BorderLayout.CENTER,button3);
container.add(BorderLayout.WEST,button4);
// container.add(BorderLayout.EAST,button5);
// jFrame.add(button1,BorderLayout.SOUTH);
jFrame.setSize(400,400);
//设置窗体可见
jFrame.setVisible(true);
//设置窗体关闭方式
jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
//创建边框布局管理器类对象
}
}
Demo02运行效果如下
Demo03
- 如果未指定布局管理器的SOUTH区域,则WEST、CENTER、EAST三个区域会填充SOUTH区域
- 以此类推,若WEST区域未指定布局,则NORTH、CENTER、SOUTH三个区域会填WEST区域
import javax.swing.*;
import java.awt.*;
public class Demo09 {
public static void main(String[] args) {
//创建JFrame类对象
JFrame jFrame = new JFrame("边框父窗体");
//获取一个容器
Container container = jFrame.getContentPane();
//设置窗体大小
BorderLayout borderLayout = new BorderLayout();
//设置JFRame窗体的布局格式
jFrame.setLayout(borderLayout);
JButton button1 = new JButton("NORTH");
JButton button2 = new JButton("SOUTH");
JButton button3 = new JButton("CENTER");
JButton button4 = new JButton("WEST");
JButton button5 = new JButton("EAST");
container.add(BorderLayout.NORTH,button1);
container.add(BorderLayout.SOUTH,button2);
container.add(BorderLayout.CENTER,button3);
container.add(BorderLayout.WEST,button4);
// container.add(BorderLayout.EAST,button5);
// jFrame.add(button1,BorderLayout.SOUTH);
jFrame.setSize(400,400);
//设置窗体可见
jFrame.setVisible(true);
//设置窗体关闭方式
jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
//创建边框布局管理器类对象
}
}
Demo03运行效果如下