3、JavaSwing 布局管理器——BoxLayout(箱式布局)

概述

官方JavaDocsApi:

https://docs.oracle.com/javase/8/docs/api/javax/swing/BoxLayout.html

https://docs.oracle.com/javase/8/docs/api/javax/swing/Box.html

BoxLayout,箱式布局管理器。

它把若干组件按水平或垂直方向依次排列放置。Swing 提供了一个实现了 BoxLayout 的容器组件Box。使用 Box 提供的静态方法,可快速创建水平/垂直箱容器(Box),以及填充组件之间空隙的不可见组件。用水平箱和垂直箱的组合嵌套可实现类似于 GridBagLayout 的效果,但没那么复杂。

创建水平/垂直箱容器(Box):

// 创建一个水平箱容器

Box hBox = Box.createHorizontalBox();

// 创建一个垂直箱容器

Box vBox = Box.createVerticalBox();

Box 内的组件之间默认没有空隙并居中,如果想在组件之间(或头部/尾部)添加空隙,可以在其中添加一个影响布局的不可见组件。Box 提供了三种用于填充空隙的不可见组件:glue、struts 和 rigidAreas。

创建 胶状(宽/高可伸缩)的不可见组件(glue):

// 创建一个 水平方向胶状 的不可见组件,用于撑满水平方向剩余的空间(如果有多个该组件,则平分剩余空间)

Component hGlue = Box.createHorizontalGlue();

// 创建一个 垂直方向胶状 的不可见组件,用于撑满垂直方向剩余的空间(如果有多个该组件,则平分剩余空间)

Component vGlue = Box.createVerticalGlue();

// 创建一个 水平和垂直方向胶状 的不可见组件,用于撑满水平和垂直方向剩余的空间(如果有多个该组件,则平分剩余空间)

Component glue = Box.createGlue();

创建 固定宽度或高度 的不可见组件(struts):

// 创建一个 固定宽度 的不可见组件(用于水平箱)

Component hStrut = Box.createHorizontalStrut(int width);

// 创建一个 固定高度 的不可见组件(用于垂直箱)

Component vStrut = Box.createVerticalStrut(int height);

创建 固定宽高 的不可见组件(rigidAreas):

// 创建 固定宽高 的不可见组件

Component rigidArea = Box.createRigidArea(new Dimension(int width, int height));

代码实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;

/**
 * 箱式布局
 * @author 28250
 *
 */
public class TestBox {

    public static void main(String[] args) {
        //创建窗口
        JFrame jf = new JFrame();
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       
        //创建按钮
        JButton btn1 = new JButton("JButton1");
        JButton btn2 = new JButton("JButton2");
        JButton btn3 = new JButton("JButton3");
        JButton btn4 = new JButton("JButton4");
        JButton btn5 = new JButton("JButton5");
       
        //创建一个水平箱子容器
        Box hBox1 = Box.createHorizontalBox();
        hBox1.add(btn1);
        hBox1.add(btn2);
        hBox1.add(btn3);
       
        //创建第二个水平箱子容器
        Box hBox2 = Box.createHorizontalBox();
        hBox2.add(btn4);
        hBox2.add(Box.createHorizontalGlue());  //添加一个水平方向胶棒不可见的组件
        hBox2.add(btn5);
       
        //创建一个装两个盒子的竖直方向的盒子
        Box vBox = Box.createVerticalBox();
        vBox.add(hBox1);
        //添加固定高度的不可见的组件
        vBox.add(Box.createVerticalStrut(20));
        vBox.add(hBox2);
       
        //将大盒子添加到面板中
        jf.setContentPane(vBox);
        //让组件中的空白去除,适应当前的最小格局大小
        jf.pack();
       
        //窗口居中
        jf.setLocationRelativeTo(null);
       
        //显示
        jf.setVisible(true);
    }
}