文章目录
- 一、布局管理器引入
- 二、布局管理器提高程序的适配性
- 三、LayoutManager 布局管理器类
- 四、FlowLayout 流式布局
- 五、FlowLayout 流式布局 API
- 六、FlowLayout 流式布局代码示例
- 1、FlowLayout 流式布局左对齐代码示例及执行效果
- 2、FlowLayout 流式布局居中对齐代码示例及执行效果
- 2、FlowLayout 流式布局右对齐代码示例及执行效果
- 七、BorderLayout 布局
- 八、BorderLayout 构造函数 API
- 九、BorderLayout 代码示例
- 1、BorderLayout 基本用法代码示例
- 2、BorderLayout 区域占用代码示例
- 3、BorderLayout 同一区域显示多个组件代码示例
- 十、GridLayout 网格布局
- 十一、GridLayout 构造函数
- 十二、GridLayout 网格布局代码示例
- 十三、GridBagLayout 网格包布局
- 十四、CardLayout 卡片布局
- 十五、CardLayout 卡片布局 API
- 十六、CardLayout 卡片布局代码示例
- 十七、BoxLayout 布局
- 十八、BoxLayout 布局 API
- 十九、BoxLayout 布局代码示例
- 1、BoxLayout 布局垂直排列代码示例
- 2、BoxLayout 布局水平排列代码示例
- 二十、Box 容器
- 二十一、Box 容器 API
- 二十二、Box 容器代码示例
- 二十三、Box 容器中添加分割
一、布局管理器引入
在上一篇博客 【Java AWT 图形界面编程】Container 容器 ③ ( ScrollPane 可滚动容器示例 ) 中 , 向 ScrollPan 中添加了 TextField 文本框 和 Button 按钮 , 但是显示的时候效果如下 :
只显示了一个按钮 , 这是由于 ScrollPan 默认的 LayoutManager 布局管理器
二、布局管理器提高程序的适配性
在界面中 添加一个 Button 按钮组件 , 可以 调用 Component 组件的 setBounds 函数
手动设置宽高大小的像素值后 , 会造成 程序在不同平台的适配问题
如果手动设置了组件的 宽高 , 位置 等精确的像素值 , 那么会 降低程序的适配效果
LayoutManager 布局管理器 可以根据不同的操作系统 , 自动调整组件的位置和大小 ;
三、LayoutManager 布局管理器类
LayoutManager 布局管理器类 :
- LayoutManager 接口
- GridLayout 网格布局
- FlowLayout 流式布局
- LayoutManager2 接口
- CardLayout 卡片布局
- GridBagLayout 网个包布局
- BorderLayout 边框布局
不同的布局管理器 , 对多个组件的展示效果不同 ;
四、FlowLayout 流式布局
FlowLayout 流式布局 中 , 组件 按照某个方向进行排列
- 从左到右
- 从右到左
- 从中间到两边
如果 遇到障碍 或者 走到界面边界 ,
就 返回到开始位置 , 在下一行从头继续按照原方向进行排列 ;
如 : 下面的布局就是从左向右的流式布局 , 将 6 个组件放在 FlowLayout 流式布局中 ,
1 , 2 , 3 组件放入后 , 再 放入 4 组件 , 发现第 1 排位置不够了 , 遇到障碍 ,
此时折 返回左侧 , 另起一行 , 在第 2 排继续从左到右排列 ;
五、FlowLayout 流式布局 API
FlowLayout 构造函数 :
- FlowLayout() 构造函数 : 使用 默认的 对齐方式 , 默认的 垂直间距 和 水平间距
/**
* 构造一个新的<code>FlowLayout</code>,具有居中对齐和
* 默认水平和垂直间隔为5单元。
*/
public FlowLayout() {
this(CENTER, 5, 5);
}
- FlowLayout(int align) 构造函数 : 使用 指定的 对齐方式 , 默认的 垂直间距 和 水平间距
/**
* 构造一个新的<code>FlowLayout</code>
* 对齐和默认的5单元水平和垂直差距。
* 对齐参数的值必须为之一
* <code>FlowLayout.LEFT</code>, <code>FlowLayout.RIGHT</code>,
* <code>FlowLayout.CENTER</code>, <code>FlowLayout.LEADING</code>,
* or <code>FlowLayout.TRAILING</code>.
* @param align 对齐值
*/
public FlowLayout(int align) {
this(align, 5, 5);
}
- FlowLayout(int align, int hgap, int vgap) 构造函数 : 使用 指定的 对齐方式 , 指定的 垂直间距 和 水平间距 , 创建流式布局 ;
/**
* 使用指定的对齐方式创建一个新的流布局管理器
* 以及指示的水平和垂直间隙。
* <p>
* 对齐参数的值必须为之一
* <code>FlowLayout.LEFT</code>, <code>FlowLayout.RIGHT</code>,
* <code>FlowLayout.CENTER</code>, <code>FlowLayout.LEADING</code>,
* or <code>FlowLayout.TRAILING</code>.
* @param align 对齐值
* @param hgap 各组件之间的水平间隙
* 在分量和
* <code>Container</code>的边界
* @param vgap 组件之间的垂直间隙
* 在分量和
* <code>Container</code>的边界
*/
public FlowLayout(int align, int hgap, int vgap) {
this.hgap = hgap;
this.vgap = vgap;
setAlignment(align);
}
六、FlowLayout 流式布局代码示例
Frame 是 Window 子类 , 是 界面中窗口 , 其 默认的布局管理器是 BorderLayout 布局管理器
通过 调用 Container#setLayout 函数 可以手动修改 容器的布局管理器 ;
1、FlowLayout 流式布局左对齐代码示例及执行效果
代码示例 :
import java.awt.*;
public class HelloAWT {
public static void main(String[] args) {
Frame frame = new Frame("AWT 界面编程");
// 创建流式布局
// 布局中的组件从左到右进行排列
// 水平间隔 10 像素, 垂直间隔 10 像素
FlowLayout flowLayout = new FlowLayout(FlowLayout.LEFT, 10, 10);
// Frame 容器设置流式布局
frame.setLayout(flowLayout);
frame.setBounds(0, 0, 800, 500);
// 添加多个组件
for (int i = 0; i < 50; i ++) {
Button button = new Button("按钮 " + i);
frame.add(button);
}
frame.setVisible(true);
}
}
执行结果 : 这是左对齐的模式 ;
2、FlowLayout 流式布局居中对齐代码示例及执行效果
居中对齐代码示例 :
import java.awt.*;
public class HelloAWT {
public static void main(String[] args) {
Frame frame = new Frame("AWT 界面编程");
// 创建流式布局
// 布局中的组件从左到右进行排列
// 水平间隔 10 像素, 垂直间隔 10 像素
FlowLayout flowLayout = new FlowLayout(FlowLayout.CENTER, 10, 10);
// Frame 容器设置流式布局
frame.setLayout(flowLayout);
frame.setBounds(0, 0, 800, 500);
// 添加多个组件
for (int i = 0; i < 50; i ++) {
Button button = new Button("按钮 " + i);
frame.add(button);
}
frame.setVisible(true);
}
}
执行效果 :
2、FlowLayout 流式布局右对齐代码示例及执行效果
代码示例 :
import java.awt.*;
public class HelloAWT {
public static void main(String[] args) {
Frame frame = new Frame("AWT 界面编程");
// 创建流式布局
// 布局中的组件从左到右进行排列
// 水平间隔 10 像素, 垂直间隔 10 像素
FlowLayout flowLayout = new FlowLayout(FlowLayout.RIGHT, 10, 10);
// Frame 容器设置流式布局
frame.setLayout(flowLayout);
frame.setBounds(0, 0, 800, 500);
// 添加多个组件
for (int i = 0; i < 50; i ++) {
Button button = new Button("按钮 " + i);
frame.add(button);
}
frame.setVisible(true);
}
}
执行效果 :
七、BorderLayout 布局
BorderLayout 布局 将 Container 容器 分割成 5 个部分 , 分别是 :
- WEST
- NORTH
- EAST
- SOUTH
- CENTER
每个部分的位置如下图所示 :
修改 使用了 BorderLayout 布局 的 Container 容器的大小时 :
- 水平调整 : NORTH , SOUTH , CENTER 部分可以进行 水平调整 ;
- 垂直调整 : EAST , WEST , CENTER 部分可以进行 垂直调整 ;
也就是说 , 调整容器大小时 ,
- NORTH 和 SOUTH 的高度是不变的 , 宽度可以改变 ;
- EAST 和 WEST 的宽度是不变的 , 高度可以改变 ;
- CENTER 区域的宽高都可以改变 ;
向 BorderLayout 布局 中添加 Component 组件 :
- 组件添加区域 : 可以 指定添加的区域 , 如果没有指定则默认添加到 CENTER 区域 ;
- 组件覆盖 : 向同一个区域添加组件 , 后放入的组件会覆盖先放入的组件 ;
八、BorderLayout 构造函数 API
BorderLayout 构造函数 API :
- BorderLayout() : 创建 BorderLayout 布局管理器 , 使用 默认的 水平间距 和 垂直间距 ;
/**
* 构造一个新的边框布局
* 组件之间无间隙。
*/
public BorderLayout() {
this(0, 0);
}
- BorderLayout() : 创建 BorderLayout 布局管理器 , 使用 指定的 水平间距 和 垂直间距 ;
/**
* 构造具有指定间距的边框布局
* 组件之间。
* 水平间隔由<code>hgap</code>指定
* 垂直间隔由<code>vgap</code>指定。
* @param hgap 水平间隙。
* @param vgap 垂直间隙。
*/
public BorderLayout(int hgap, int vgap) {
this.hgap = hgap;
this.vgap = vgap;
}
九、BorderLayout 代码示例
1、BorderLayout 基本用法代码示例
代码示例 :
import java.awt.*;
public class HelloAWT {
public static void main(String[] args) {
Frame frame = new Frame("AWT 界面编程");
// 创建 BorderLayout 布局管理器
// 指定水平间距 50, 垂直间距 30
BorderLayout borderLayout = new BorderLayout(50, 30);
// Frame 容器设置流式布局
frame.setLayout(borderLayout);
// 添加多个组件
frame.add(new Button("WEST"), BorderLayout.WEST);
frame.add(new Button("NORTH"), BorderLayout.NORTH);
frame.add(new Button("EAST"), BorderLayout.EAST);
frame.add(new Button("SOUTH"), BorderLayout.SOUTH);
frame.add(new Button("CENTER"), BorderLayout.CENTER);
// 自定设置合适的大小
frame.pack();
frame.setVisible(true);
}
}
执行效果 :
拖动改变该窗口的大小 , 发现 NORTH 和 SOUTH 的高度是不变的 , EAST 和 WEST 的宽度是不变的 ;
2、BorderLayout 区域占用代码示例
代码示例 :
import java.awt.*;
public class HelloAWT {
public static void main(String[] args) {
Frame frame = new Frame("AWT 界面编程");
// 创建 BorderLayout 布局管理器
// 指定水平间距 50, 垂直间距 30
BorderLayout borderLayout = new BorderLayout(50, 30);
// Frame 容器设置流式布局
frame.setLayout(borderLayout);
// 添加多个组件
// 如果不向 EAST 和 WEST 中添加组件, 则该区域会被其它区域占用
// 这里是被 CENTER 区域占用
frame.add(new Button("NORTH"), BorderLayout.NORTH);
frame.add(new Button("SOUTH"), BorderLayout.SOUTH);
frame.add(new Button("CENTER"), BorderLayout.CENTER);
// 自定设置合适的大小
frame.pack();
frame.setVisible(true);
}
}
执行结果 :
3、BorderLayout 同一区域显示多个组件代码示例
代码示例 :
import java.awt.*;
public class HelloAWT {
public static void main(String[] args) {
Frame frame = new Frame("AWT 界面编程");
// 创建 BorderLayout 布局管理器
// 指定水平间距 50, 垂直间距 30
BorderLayout borderLayout = new BorderLayout(50, 30);
// Frame 容器设置流式布局
frame.setLayout(borderLayout);
// 添加多个组件
// 如果不向 EAST 和 WEST 中添加组件, 则该区域会被其它区域占用
// 这里是被 CENTER 区域占用
frame.add(new Button("NORTH"), BorderLayout.NORTH);
frame.add(new Button("SOUTH"), BorderLayout.SOUTH);
frame.add(new Button("CENTER"), BorderLayout.CENTER);
// 向默认区域添加多个组件
Panel panel = new Panel();
panel.add(new Button("按钮1"));
panel.add(new Button("按钮2"));
frame.add(panel);
// 自定设置合适的大小
frame.pack();
frame.setVisible(true);
}
}
执行结果 :
十、GridLayout 网格布局
GridLayout 网格布局管理器 可以将 当前的 Container 容器 划分成 网格 , 每个网格 区域 相同 ;
向 使用了 GridLayout 网格布局管理器 的 Container 容器 中添加 Component 组件时 , 默认的添加顺序是 从左到右 , 从上到下 ;
放置在 GridLayout 网格中的组件 , 组件的大小由网格的区域大小决定 , 默认情况下 组件会填充满所在的单个网格区域 ;
十一、GridLayout 构造函数
GridLayout 构造函数 :
- GridLayout() : 单行网格布局 ;
/**
* 创建一个默认为每个组件一列的网格布局,
* 在单行中。
* @since JDK1.1
*/
public GridLayout() {
this(1, 0, 0, 0);
}
- GridLayout(int rows, int cols) : 网格布局 中的 行数 和 列数 使用指定的值 , 网格的 水平 和 垂直 间隔使用默认值 ;
/**
* 创建具有指定行数和的网格布局
* 列。布局中的所有组件都被赋予相同的大小。
* <p>
* <code>rows</code>和<code>cols</code>中的一个(而不是两个)可以
* 为零,这意味着任何数量的物体都可以放置在行或列。
* @param rows 值为0的行表示
* 任意数量的行。
* @param cols 列,值为0表示
* 任意数量的列。
*/
public GridLayout(int rows, int cols) {
this(rows, cols, 0, 0);
}
- GridLayout(int rows, int cols, int hgap, int vgap) : 网格布局 中的 行数 和 列数 使用指定的值 , 网格的 水平 和 垂直 间隔使用指定的值 ;
/**
* 创建具有指定行数和的网格布局
* 列。布局中的所有组件都被赋予相同的大小。
* < p >
* 此外,水平和垂直间隙设置为
* 指定的值。水平间隔放置在每个之间
* 列的。垂直的间隙被放置在每一个之间
* 行。
* < p >
* <code>行</code>和<code>cols</code>中的一个(而不是两个)可以
* 为零,这意味着任何数量的物体都可以放置在
* 行或列。
* < p >
* 所有<code>GridLayout</code>构造函数都遵循此构造函数。
* @param rows 值为0的行表示
* 任意数量的行
* @param cols 列,值为0表示
* 任意数量的列
* @param hgap 水平间隙
* @param vgap 垂直差距
* @exception IllegalArgumentException if the value of both
* <code>rows</code> and <code>cols</code> is
* set to zero
*/
public GridLayout(int rows, int cols, int hgap, int vgap) {
if ((rows == 0) && (cols == 0)) {
throw new IllegalArgumentException("rows and cols cannot both be zero");
}
this.rows = rows;
this.cols = cols;
this.hgap = hgap;
this.vgap = vgap;
}
十二、GridLayout 网格布局代码示例
代码示例 :
import java.awt.*;
public class HelloAWT {
public static void main(String[] args) {
// Frame 默认的布局管理器就是 BorderLayout
Frame frame = new Frame("AWT 界面编程");
// 用于存放 文本框
Panel panel = new Panel();
// 该文本框可以存放 30 个字符
TextField textField = new TextField(30);
panel.add(textField);
frame.add(panel, BorderLayout.NORTH);
// 用于存放 网格布局中的组件
// 需要设置该容器的 布局管理器为 网格布局管理器
Panel panel2 = new Panel();
panel2.setLayout(new GridLayout(3, 5, 4, 4));
for (int i = 0; i < 10; i++) {
panel2.add(new Button(i + ""));
}
panel2.add(new Button("+"));
panel2.add(new Button("-"));
panel2.add(new Button("*"));
panel2.add(new Button("/"));
panel2.add(new Button("="));
frame.add(panel2, BorderLayout.CENTER);
// 自定设置合适的大小
frame.pack();
frame.setVisible(true);
}
}
执行结果 :
十三、GridBagLayout 网格包布局
GridBagLayout 网格包布局 , 是在 GridLayout 网格布局的基础上 , 单个组件可以占用多个网格 , 占用的多个网格的大小形状也可以任意设置 , 每个组件都可以占用多行和多列的网格
如果 GridBagLayout 网格包布局所在的 窗口 大小改变 , 对应的 网格 也会被 拉伸或压缩 ;
向 使用 GridBagLayout 网格包布局 的 Container 容器中 添加 Component 组件时 , 需要指定添加的 组件具体占的 网格 行列数 ; 可借助 GridBagConstaints 配置 组件 的 行列大小 ;
十四、CardLayout 卡片布局
CardLayout 卡片布局 中 , Container 容器中 每个组件都相当于一张卡片 , 这些卡片平时都折叠起来 , 只有 最上面的卡片中的组件才是可见的 , 其它组件都不可见 ;
十五、CardLayout 卡片布局 API
CardLayout 卡片布局 API :
- CardLayout() : 创建 默认 的卡片布局管理器 ;
/**
* 创建一个空白大小为0的新卡片布局。
*/
public CardLayout() {
this(0, 0);
}
- CardLayout(int hgap, int vgap) : 创建 指定 水平间隙 和 垂直间隙
/**
* 创建具有指定水平和的新卡片布局
* 垂直差异。水平的空隙放在左边和
* 正确的边缘。垂直的缝隙位于顶部和底部
* 边缘。
* @param hgap 水平间隙。卡片与左右两边的间距
* @param vgap 垂直间隙。卡片与上下两边的间距
*/
public CardLayout(int hgap, int vgap) {
this.hgap = hgap;
this.vgap = vgap;
}
- void first(Container parent) : 显示 目标容器 中的 第一张卡片 ;
/**
* 翻转到容器的第一张卡片。
* @param parent 要在其中进行布局的父容器
* @see java.awt.CardLayout#last
*/
public void first(Container parent)
- void last(Container parent) : 显示 目标容器 中的 最后一张卡片 ;
/**
* 翻转到容器的最后一张牌。
* @param parent 要在其中进行布局的父容器
* @see java.awt.CardLayout#first
*/
public void last(Container parent)
- void previous(Container parent) : 显示 目标容器 中的 前一张卡片 ;
/**
* 翻转到指定容器的上一张卡片。如果
* 目前可见的卡片是第一张,这个方法翻到
* 布局的最后一张牌。
* @param parent 要在其中进行布局的父容器
* @see java.awt.CardLayout#next
*/
public void previous(Container parent)
- void next(Container parent) : 显示 目标容器 中的 后一张卡片 ;
/**
* 翻转到指定容器的下一张牌。如果
* 目前可见的卡片是最后一张,此方法翻到
* 布局中的第一张牌。
* @param parent 要在其中进行布局的父容器
* @see java.awt.CardLayout#previous
*/
public void next(Container parent)
- void show(Container parent, String name) : 显示 目标容器 中的 指定名称的 卡片 ;
/**
* 控件跳转到添加到此布局中的组件
* 指定<code>name</code>,使用<code>addLayoutComponent</code>。
* 如果不存在这样的组件,那么什么也不会发生。
* @param parent 要在其中进行布局的父容器
* @param name 组件名称
* @see java.awt.CardLayout#addLayoutComponent(java.awt.Component, java.lang.Object)
*/
public void show(Container parent, String name)
十六、CardLayout 卡片布局代码示例
代码示例 :
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class HelloAWT {
public static void main(String[] args) {
// I. Frame 默认的布局管理器就是 BorderLayout
Frame frame = new Frame("AWT 界面编程");
// II. 设置存储卡片布局的 Panel
// 该容器设置 卡片布局管理器
Panel panel = new Panel();
CardLayout cardLayout = new CardLayout();
panel.setLayout(cardLayout);
// 向 Panel 中添加多个 卡片组件
for (int i = 0; i < 5; i++) {
panel.add("" + i, new Button("" + i));
}
// 将 Panel 放到 Frame 窗口的默认区域 , 也就是 Center 区域
frame.add(panel);
// III. 创建 存放 按钮的 Panel 容器
Panel panel2 = new Panel();
Button b0 = new Button("first");
Button b1 = new Button("last");
Button b2 = new Button("previous");
Button b3 = new Button("next");
Button b4 = new Button("second");
// 设置按钮事件监听器
ActionListener listener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 获取按钮文字
String text = e.getActionCommand();
switch (text) {
case "first":
cardLayout.first(panel);
break;
case "last":
cardLayout.last(panel);
break;
case "previous":
cardLayout.previous(panel);
break;
case "next":
cardLayout.next(panel);
break;
case "second":
cardLayout.show(panel, "2");
break;
}
}
};
// 为按钮设置监听器
b0.addActionListener(listener);
b1.addActionListener(listener);
b2.addActionListener(listener);
b3.addActionListener(listener);
b4.addActionListener(listener);
// 将按钮设置到布局中
panel2.add(b0);
panel2.add(b1);
panel2.add(b2);
panel2.add(b3);
panel2.add(b4);
// 将按钮布局添加到 Frame 窗口中
// 放在 SOUTH 区域
frame.add(panel2, BorderLayout.SOUTH);
// IV. 自定设置合适的大小
frame.pack();
frame.setVisible(true);
}
}
执行效果 :
拖动放大查看效果 :
点击 last 按钮 :
点击 previous 按钮 :
点击 next 按钮 :
点击 second 按钮 :
十七、BoxLayout 布局
BoxLayout 布局
在 BoxLayout 布局 中 , 可以 在 垂直 和 水平 两个方向上 摆放 Component 组件 ;
十八、BoxLayout 布局 API
BoxLayout 布局 API :
- BoxLayout(Container target, int axis) : 为 Container target 组件 配置本 BoxLayout 布局管理器 , 该布局管理器会 按照指定的方向进行排列 , 垂直 或 水平方向 ;
/**
* 创建布局管理器,该管理器将沿
* 给定的轴。
*
* @param target 需要布置的容器
* @param axis 沿轴线布置组件。可以是其中之一:
* <code>BoxLayout.X_AXIS</code>,
* <code>BoxLayout.Y_AXIS</code>,
* <code>BoxLayout.LINE_AXIS</code> or
* <code>BoxLayout.PAGE_AXIS</code>
*
* @exception AWTError if the value of <code>axis</code> is invalid
*/
@ConstructorProperties({"target", "axis"})
public BoxLayout(Container target, int axis)
十九、BoxLayout 布局代码示例
1、BoxLayout 布局垂直排列代码示例
代码示例 :
import javax.swing.*;
import java.awt.*;
import java.beans.ConstructorProperties;
public class HelloAWT {
public static void main(String[] args) {
// I. Frame 默认的布局管理器就是 BorderLayout
Frame frame = new Frame("AWT 界面编程");
// II. 为 Frame 配置 BoxLayout 布局管理器
// 组件垂直摆放
BoxLayout boxLayout = new BoxLayout(frame, BoxLayout.Y_AXIS);
// 为容器设置布局管理器
frame.setLayout(boxLayout);
frame.add(new Button("按钮 1"));
frame.add(new Button("按钮 2"));
// III. 自定设置合适的大小
frame.pack();
frame.setVisible(true);
}
}
执行效果 :
拖动放大后的效果 :
2、BoxLayout 布局水平排列代码示例
代码示例 :
import javax.swing.*;
import java.awt.*;
import java.beans.ConstructorProperties;
public class HelloAWT {
public static void main(String[] args) {
// I. Frame 默认的布局管理器就是 BorderLayout
Frame frame = new Frame("AWT 界面编程");
// II. 为 Frame 配置 BoxLayout 布局管理器
// 组件垂直摆放
BoxLayout boxLayout = new BoxLayout(frame, BoxLayout.Y_AXIS);
// 为容器设置布局管理器
frame.setLayout(boxLayout);
frame.add(new Button("按钮 1"));
frame.add(new Button("按钮 2"));
// III. 自定设置合适的大小
frame.pack();
frame.setVisible(true);
}
}
执行效果 :
放大后的效果 :
二十、Box 容器
为了 方便使用 BoxLayout 布局 , Swing 中提供了 Box 容器 ;
Box 容器 默认的 布局管理器 就是 BoxLayout ;
通过在 Box 容器构造函数中传入不同的参数 , 可以直接创建 水平排列组件的 Box 容器 或 垂直排列组件的 Box 容器 ;
Box 容器类似于 Android 中的 LinearLayout ;
二十一、Box 容器 API
Box 容器 API :
- static Box createHorizontalBox() : 创建 水平排列组件的 Box 容器 ;
/**
* 创建一个显示其组件的<code>Box</code>
* 从左到右。如果你想要一个<code>Box</code>那
* 的组件方向
* <code>Box</code>使用构造函数并传入
* <code>BoxLayout.LINE_AXIS</code>,例如:
* <pre>
* Box lineBox = new Box(BoxLayout.LINE_AXIS);
* </pre>
*
* @return the box
*/
public static Box createHorizontalBox() {
return new Box(BoxLayout.X_AXIS);
}
- static Box createVerticalBox() : 创建 垂直排列组件的 Box 容器 ;
/**
* 创建一个显示其组件的<code>Box</code>
* 从上到下。如果你想要一个<code>Box</code>那
* 的组件方向
* <code>Box</code>使用构造函数并传入
* <code>BoxLayout.PAGE_AXIS</code>, eg:
* <pre>
* Box lineBox = new Box(BoxLayout.PAGE_AXIS);
* </pre>
*
* @return the box
*/
public static Box createVerticalBox() {
return new Box(BoxLayout.Y_AXIS);
}
二十二、Box 容器代码示例
代码示例 :
import javax.swing.*;
import java.awt.*;
public class HelloAWT {
public static void main(String[] args) {
// I. Frame 默认的布局管理器就是 BorderLayout
Frame frame = new Frame("AWT 界面编程");
// III. 设置主要布局
// 创建第一组按钮
Box box = Box.createHorizontalBox();
box.add(new Button("水平按钮 1"));
box.add(new Button("水平按钮 2"));
// 创建第二组按钮
Box box2 = Box.createVerticalBox();
box2.add(new Button("垂直按钮 1"));
box2.add(new Button("垂直按钮 2"));
// 创建存放两组按钮的 Box
Box box3 = Box.createVerticalBox();
box3.add(box);
box3.add(box2);
// 将存放两组按钮的 Box 容器放入 Frame 窗口
frame.add(box3);
// III. 自定设置合适的大小
frame.pack();
frame.setVisible(true);
}
}
执行结果 :
改变窗口大小 :
二十三、Box 容器中添加分割
代码示例 :
import javax.swing.*;
import java.awt.*;
public class HelloAWT {
public static void main(String[] args) {
// I. Frame 默认的布局管理器就是 BorderLayout
Frame frame = new Frame("AWT 界面编程");
// III. 设置主要布局
// 创建第一组按钮
Box box = Box.createHorizontalBox();
box.add(new Button("水平按钮 1"));
// 随窗口大小改变而改变
box.add(Box.createHorizontalGlue());
box.add(new Button("水平按钮 2"));
// 固定分割值, 不随窗口大小改变而改变
box.add(Box.createHorizontalStrut(30));
box.add(new Button("水平按钮 3"));
// 创建第二组按钮
Box box2 = Box.createVerticalBox();
box2.add(new Button("垂直按钮 1"));
// 随窗口大小改变而改变
box2.add(Box.createVerticalGlue());
box2.add(new Button("垂直按钮 2"));
// 固定分割值, 不随窗口大小改变而改变
box2.add(Box.createVerticalStrut(30));
box2.add(new Button("垂直按钮 3"));
// 创建存放两组按钮的 Box
Box box3 = Box.createVerticalBox();
box3.add(box);
box3.add(box2);
// 将存放两组按钮的 Box 容器放入 Frame 窗口
frame.add(box3);
// III. 自定设置合适的大小
frame.pack();
frame.setVisible(true);
}
}
执行结果 :
改变窗口大小后的效果 :