12.1 常用布局管理器
布局管理器也就是GUI中的布局设置,是指窗口上的组件遵循一定的规则来排列,并会随着窗口大小的变化来变化组件大小和位置的布局方式。
当一个容器被创建后,它们有相应的默认布局管理器,用户可以为容器指定不同的布局管理器,在不同的布局管理器下,同一个组件将会有不同的显示效果。在java.awt包中提供了五种布局管理器,每种布局管理器对应一种布局策略,分别是FlowLayout(流式布局管理器)、BorderLayout(边界布局管理器)、GridLayout(网格布局管理器)、GridBagLayout(网格包布局管理器)和CardLayout(卡片布局管理器)。javax.swing包中提供的布局管理器有盒式布局管理器BoxLayout、重叠布局管理器OverlayLayout和弹簧布局管理器SpringLayout等。
12.5.1 FlowLayout
FlowLayout类属于流式布局管理器,使用此种布局方式会使所有的组件像流水一样依次进行排列,FlowLayout类的常量及构造方法如表12.17所示。
- FlowLayout类的常量及构造方法
常量及构造方法声明 |
功能描述 |
public static final int CENTER |
行内组件居中对齐 |
public static final int LEFT |
行内组件左对齐 |
public static final int RIGHT |
行内组件右对齐 |
public FlowLayout() |
创建一个FlowLayout,居中对齐,默认的水平和垂直间距是5个单位 |
public FlowLayout(int align) |
创建一个FlowLayout,并指定对齐方式,垂直间距默认是5个单位 |
public FlowLayout(int align,int hgap,int vgap) |
创建一个FlowLayout,并指定对齐方式和垂直间距 |
表12.7中列举了FlowLayout类的常量及构造方法,接下来通过一个案例来演示FlowLayout布局管理器的使用,如例12-16所示。
例12-16 Demo1216.java
1import java.awt.*;
2import javax.swing.*;
3public class Demo1216 {
4 public static void main(String[] args) {
5 JFrame jFrame = new JFrame("JFrame窗口下的流式布局管理器");
6 // 创建JFrame对象
7 // 设置窗体中布局管理器为FlowLayout
8 jFrame.setLayout(new FlowLayout(FlowLayout.CENTER, 30, 3));
9 JButton jButton = null;
10 for (int i = 0; i < 8; i++) {
11 jButton = new JButton("按钮- " + i); // 创建按钮
12 jFrame.add(jButton); // 将按钮加入到JFrame
13 }
14 jFrame.setSize(400, 150); // 设置长和宽
15 jFrame.setLocation(500, 200); // 设置窗口相对位置
16 jFrame.setVisible(true); // 设置为可见
17 jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
18 }
19}
程序的运行结果如图12.18所示。
- 例12-16运行结果左图为程序运行初始结果,右图是将窗口向右拉大后的结果
图12.18中,运行程序创建Frame窗体后,将布局设置为使用FlowLayout布局管理器并设置组件之间的水平和垂直距离,之后循环添加8个按钮到Frame中,最后设置Frame窗体的长宽以及可见。
12.5.1 BorderLayout
BorderLayout类将一个窗体的版面分成东、西、南、北、中5个区域,可以直接将需要的组件放到这5个区域中,BorderLayout类的常量及构造方法如表12.18所示。
- BorderLayout类的常量及构造方法
常量及构造方法声明 |
功能描述 |
BorderLayout.EAST |
将组件设置在右方 |
BorderLayout.WEST |
将组件设置在左方 |
BorderLayout.SOUTH |
将组件设置在下方 |
BorderLayout.NORTH |
将组件设置在北方 |
BorderLayout.CENTER |
将组件设置在* |
public BorderLayout() |
创建一个没有间距的BorderLayout布局器 |
public BorderLayout(int hgap,int vgap) |
创建一个有水平和垂直间距的BorderLayout布局器 |
表12.18中列举了BorderLayout类的常量及构造方法,接下来通过一个案例来演示BorderLayout布局管理器的使用,如例12-17所示。
例12-17 Demo1217.java
1import java.awt.*;
2import javax.swing.*;
3public class Demo1217{
4 public static void main(String[] args) {
5 // 创建JFrame对象
6 JFrame jFrame = new JFrame("JFrame窗口下的边框式布局管理器");
7 // 设置窗体中布局管理器为BorderLayout
8 jFrame.setLayout(new BorderLayout(10,10));
9 jFrame.add(new JButton("右"),BorderLayout.EAST);
10 jFrame.add(new JButton("左"),BorderLayout.WEST);
11 jFrame.add(new JButton("下"),BorderLayout.SOUTH);
12 jFrame.add(new JButton("上"),BorderLayout.NORTH);
13 jFrame.add(new JButton("中"),BorderLayout.CENTER);
14 jFrame.setSize(420, 250); // 设置长和宽
15 jFrame.setLocation(500, 200); // 设置窗口相对位置
16 jFrame.setVisible(true); // 设置为可见
17 jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
18 }
19}
程序的运行结果如图12.19所示。
- 例12-17运行结果
图12.19中,运行程序创建Frame窗体后,将布局设置为使用BorderLayout布局管理器并设置组件之间的水平和垂直距离都为10,之后添加5个按钮到Frame中并指定常量,用于布局的位置,最后设置Frame窗体的长宽以及可见。