常用布局管理器

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窗体的长宽以及可见。

上一篇:GIU 练习


下一篇:布局管理器练习