【Java AWT 图形界面编程】LayoutManager 布局管理器总结 ( FlowLayout 布局

【Java AWT 图形界面编程】LayoutManager 布局管理器总结 ( FlowLayout 布局

文章目录

一、布局管理器引入二、布局管理器提高程序的适配性三、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 函数 , 手动为其设置 位置 和 大小 ,

手动设置宽高大小的像素值后 , 会造成 程序在不同平台的适配问题 , 如 : 在 Windows 中设置 100 px 的效果 , 与 在 Linux 中设置 200 px 的效果正好合适 ;

如果手动设置了组件的 宽高 , 位置 等精确的像素值 , 那么会 降低程序的适配效果 , 此时就需要在 Windows 下写一套程序 , 在 Linux 下写一套程序 ;

LayoutManager 布局管理器 可以根据不同的操作系统 , 自动调整组件的位置和大小 ;

三、LayoutManager 布局管理器类LayoutManager 布局管理器类 :

LayoutManager 接口 GridLayout 网格布局FlowLayout 流式布局LayoutManager2 接口 CardLayout 卡片布局GridBagLayout 网个包布局BorderLayout 边框布局不同的布局管理器 , 对多个组件的展示效果不同 ;

四、FlowLayout 流式布局FlowLayout 流式布局 中 , 组件 按照某个方向进行排列 , 如 :

从左到右从右到左从中间到两边如果 遇到障碍 或者 走到界面边界 ,

就 返回到开始位置 , 在下一行从头继续按照原方向进行排列 ;

如 : 下面的布局就是从左向右的流式布局 , 将 6 个组件放在 FlowLayout 流式布局中 ,

1 , 2 , 3 组件放入后 , 再 放入 4 组件 , 发现第 1 排位置不够了 , 遇到障碍 ,

此时折 返回左侧 , 另起一行 , 在第 2 排继续从左到右排列 ;

五、FlowLayout 流式布局 APIFlowLayout 构造函数 :

FlowLayout() 构造函数 : 使用 默认的 对齐方式 , 默认的 垂直间距 和 水平间距 , 创建流式布局 ;代码语言:javascript代码运行次数:0运行复制 /**

* 构造一个新的FlowLayout,具有居中对齐和

* 默认水平和垂直间隔为5单元。

*/

public FlowLayout() {

this(CENTER, 5, 5);

}FlowLayout(int align) 构造函数 : 使用 指定的 对齐方式 , 默认的 垂直间距 和 水平间距 , 创建流式布局 ;代码语言:javascript代码运行次数:0运行复制 /**

* 构造一个新的FlowLayout

* 对齐和默认的5单元水平和垂直差距。

* 对齐参数的值必须为之一

* FlowLayout.LEFT, FlowLayout.RIGHT,

* FlowLayout.CENTER, FlowLayout.LEADING,

* or FlowLayout.TRAILING.

* @param align 对齐值

*/

public FlowLayout(int align) {

this(align, 5, 5);

}FlowLayout(int align, int hgap, int vgap) 构造函数 : 使用 指定的 对齐方式 , 指定的 垂直间距 和 水平间距 , 创建流式布局 ;代码语言:javascript代码运行次数:0运行复制 /**

* 使用指定的对齐方式创建一个新的流布局管理器

* 以及指示的水平和垂直间隙。

*

* 对齐参数的值必须为之一

* FlowLayout.LEFT, FlowLayout.RIGHT,

* FlowLayout.CENTER, FlowLayout.LEADING,

* or FlowLayout.TRAILING.

* @param align 对齐值

* @param hgap 各组件之间的水平间隙

* 在分量和

* Container的边界

* @param vgap 组件之间的垂直间隙

* 在分量和

* Container的边界

*/

public FlowLayout(int align, int hgap, int vgap) {

this.hgap = hgap;

this.vgap = vgap;

setAlignment(align);

}六、FlowLayout 流式布局代码示例Frame 是 Window 子类 , 是 界面中窗口 , 其 默认的布局管理器是 BorderLayout 布局管理器 ,

通过 调用 Container#setLayout 函数 可以手动修改 容器的布局管理器 ;

1、FlowLayout 流式布局左对齐代码示例及执行效果代码示例 :

代码语言:javascript代码运行次数:0运行复制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 流式布局居中对齐代码示例及执行效果居中对齐代码示例 :

代码语言:javascript代码运行次数:0运行复制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 流式布局右对齐代码示例及执行效果代码示例 :

代码语言:javascript代码运行次数:0运行复制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 个部分 , 分别是 :

WESTNORTHEASTSOUTHCENTER每个部分的位置如下图所示 :

修改 使用了 BorderLayout 布局 的 Container 容器的大小时 :

水平调整 : NORTH , SOUTH , CENTER 部分可以进行 水平调整 ;垂直调整 : EAST , WEST , CENTER 部分可以进行 垂直调整 ;也就是说 , 调整容器大小时 ,

NORTH 和 SOUTH 的高度是不变的 , 宽度可以改变 ;EAST 和 WEST 的宽度是不变的 , 高度可以改变 ;CENTER 区域的宽高都可以改变 ;向 BorderLayout 布局 中添加 Component 组件 :

组件添加区域 : 可以 指定添加的区域 , 如果没有指定则默认添加到 CENTER 区域 ;组件覆盖 : 向同一个区域添加组件 , 后放入的组件会覆盖先放入的组件 ;八、BorderLayout 构造函数 APIBorderLayout 构造函数 API :

BorderLayout() : 创建 BorderLayout 布局管理器 , 使用 默认的 水平间距 和 垂直间距 ;代码语言:javascript代码运行次数:0运行复制 /**

* 构造一个新的边框布局

* 组件之间无间隙。

*/

public BorderLayout() {

this(0, 0);

}BorderLayout() : 创建 BorderLayout 布局管理器 , 使用 指定的 水平间距 和 垂直间距 ;代码语言:javascript代码运行次数:0运行复制 /**

* 构造具有指定间距的边框布局

* 组件之间。

* 水平间隔由hgap指定

* 垂直间隔由vgap指定。

* @param hgap 水平间隙。

* @param vgap 垂直间隙。

*/

public BorderLayout(int hgap, int vgap) {

this.hgap = hgap;

this.vgap = vgap;

}九、BorderLayout 代码示例1、BorderLayout 基本用法代码示例代码示例 :

代码语言:javascript代码运行次数:0运行复制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 区域占用代码示例代码示例 :

代码语言:javascript代码运行次数:0运行复制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 同一区域显示多个组件代码示例代码示例 :

代码语言:javascript代码运行次数:0运行复制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() : 单行网格布局 ;代码语言:javascript代码运行次数:0运行复制 /**

* 创建一个默认为每个组件一列的网格布局,

* 在单行中。

* @since JDK1.1

*/

public GridLayout() {

this(1, 0, 0, 0);

}GridLayout(int rows, int cols) : 网格布局 中的 行数 和 列数 使用指定的值 , 网格的 水平 和 垂直 间隔使用默认值 ;代码语言:javascript代码运行次数:0运行复制 /**

* 创建具有指定行数和的网格布局

* 列。布局中的所有组件都被赋予相同的大小。

*

* rowscols中的一个(而不是两个)可以

* 为零,这意味着任何数量的物体都可以放置在行或列。

* @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) : 网格布局 中的 行数 和 列数 使用指定的值 , 网格的 水平 和 垂直 间隔使用指定的值 ;代码语言:javascript代码运行次数:0运行复制 /**

* 创建具有指定行数和的网格布局

* 列。布局中的所有组件都被赋予相同的大小。

* < p >

* 此外,水平和垂直间隙设置为

* 指定的值。水平间隔放置在每个之间

* 列的。垂直的间隙被放置在每一个之间

* 行。

* < p >

* cols中的一个(而不是两个)可以

* 为零,这意味着任何数量的物体都可以放置在

* 行或列。

* < p >

* 所有GridLayout构造函数都遵循此构造函数。

* @param rows 值为0的行表示

* 任意数量的行

* @param cols 列,值为0表示

* 任意数量的列

* @param hgap 水平间隙

* @param vgap 垂直差距

* @exception IllegalArgumentException if the value of both

* rows and cols 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 网格布局代码示例代码示例 :

代码语言:javascript代码运行次数:0运行复制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 网格布局的基础上 , 单个组件可以占用多个网格 , 占用的多个网格的大小形状也可以任意设置 , 每个组件都可以占用多行和多列的网格 , 即 m x n 大小的网格 , 如 : 占用 1 x 2 的网格 , 占用 3 x 4 的网格 ;

如果 GridBagLayout 网格包布局所在的 窗口 大小改变 , 对应的 网格 也会被 拉伸或压缩 ;

向 使用 GridBagLayout 网格包布局 的 Container 容器中 添加 Component 组件时 , 需要指定添加的 组件具体占的 网格 行列数 ; 可借助 GridBagConstaints 配置 组件 的 行列大小 ;

十四、CardLayout 卡片布局CardLayout 卡片布局 中 , Container 容器中 每个组件都相当于一张卡片 , 这些卡片平时都折叠起来 , 只有 最上面的卡片中的组件才是可见的 , 其它组件都不可见 ;

十五、CardLayout 卡片布局 APICardLayout 卡片布局 API :

CardLayout() : 创建 默认 的卡片布局管理器 ;代码语言:javascript代码运行次数:0运行复制 /**

* 创建一个空白大小为0的新卡片布局。

*/

public CardLayout() {

this(0, 0);

}CardLayout(int hgap, int vgap) : 创建 指定 水平间隙 和 垂直间隙 的 卡片布局管理器 ;代码语言:javascript代码运行次数:0运行复制 /**

* 创建具有指定水平和的新卡片布局

* 垂直差异。水平的空隙放在左边和

* 正确的边缘。垂直的缝隙位于顶部和底部

* 边缘。

* @param hgap 水平间隙。卡片与左右两边的间距

* @param vgap 垂直间隙。卡片与上下两边的间距

*/

public CardLayout(int hgap, int vgap) {

this.hgap = hgap;

this.vgap = vgap;

}void first(Container parent) : 显示 目标容器 中的 第一张卡片 ;代码语言:javascript代码运行次数:0运行复制 /**

* 翻转到容器的第一张卡片。

* @param parent 要在其中进行布局的父容器

* @see java.awt.CardLayout#last

*/

public void first(Container parent)void last(Container parent) : 显示 目标容器 中的 最后一张卡片 ;代码语言:javascript代码运行次数:0运行复制 /**

* 翻转到容器的最后一张牌。

* @param parent 要在其中进行布局的父容器

* @see java.awt.CardLayout#first

*/

public void last(Container parent)void previous(Container parent) : 显示 目标容器 中的 前一张卡片 ;代码语言:javascript代码运行次数:0运行复制 /**

* 翻转到指定容器的上一张卡片。如果

* 目前可见的卡片是第一张,这个方法翻到

* 布局的最后一张牌。

* @param parent 要在其中进行布局的父容器

* @see java.awt.CardLayout#next

*/

public void previous(Container parent)void next(Container parent) : 显示 目标容器 中的 后一张卡片 ;代码语言:javascript代码运行次数:0运行复制 /**

* 翻转到指定容器的下一张牌。如果

* 目前可见的卡片是最后一张,此方法翻到

* 布局中的第一张牌。

* @param parent 要在其中进行布局的父容器

* @see java.awt.CardLayout#previous

*/

public void next(Container parent)void show(Container parent, String name) : 显示 目标容器 中的 指定名称的 卡片 ;代码语言:javascript代码运行次数:0运行复制 /**

* 控件跳转到添加到此布局中的组件

* 指定name,使用addLayoutComponent

* 如果不存在这样的组件,那么什么也不会发生。

* @param parent 要在其中进行布局的父容器

* @param name 组件名称

* @see java.awt.CardLayout#addLayoutComponent(java.awt.Component, java.lang.Object)

*/

public void show(Container parent, String name)十六、CardLayout 卡片布局代码示例代码示例 :

代码语言:javascript代码运行次数:0运行复制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 布局 不是 AWT 中的布局 , 而是 Swing 中引入的 ;

在 BoxLayout 布局 中 , 可以 在 垂直 和 水平 两个方向上 摆放 Component 组件 ;

十八、BoxLayout 布局 APIBoxLayout 布局 API :

BoxLayout(Container target, int axis) : 为 Container target 组件 配置本 BoxLayout 布局管理器 , 该布局管理器会 按照指定的方向进行排列 , 垂直 或 水平方向 ;代码语言:javascript代码运行次数:0运行复制 /**

* 创建布局管理器,该管理器将沿

* 给定的轴。

*

* @param target 需要布置的容器

* @param axis 沿轴线布置组件。可以是其中之一:

* BoxLayout.X_AXIS,

* BoxLayout.Y_AXIS,

* BoxLayout.LINE_AXIS or

* BoxLayout.PAGE_AXIS

*

* @exception AWTError if the value of axis is invalid

*/

@ConstructorProperties({"target", "axis"})

public BoxLayout(Container target, int axis)十九、BoxLayout 布局代码示例1、BoxLayout 布局垂直排列代码示例代码示例 :

代码语言:javascript代码运行次数:0运行复制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 布局水平排列代码示例代码示例 :

代码语言:javascript代码运行次数:0运行复制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 容器 APIBox 容器 API :

static Box createHorizontalBox() : 创建 水平排列组件的 Box 容器 ;代码语言:javascript代码运行次数:0运行复制 /**

* 创建一个显示其组件的Box

* 从左到右。如果你想要一个Box

* 的组件方向

* Box使用构造函数并传入

* BoxLayout.LINE_AXIS,例如:

*

* Box lineBox = new Box(BoxLayout.LINE_AXIS);

*

*

* @return the box

*/

public static Box createHorizontalBox() {

return new Box(BoxLayout.X_AXIS);

}static Box createVerticalBox() : 创建 垂直排列组件的 Box 容器 ;代码语言:javascript代码运行次数:0运行复制 /**

* 创建一个显示其组件的Box

* 从上到下。如果你想要一个Box

* 的组件方向

* Box使用构造函数并传入

* BoxLayout.PAGE_AXIS, eg:

*

* Box lineBox = new Box(BoxLayout.PAGE_AXIS);

*

*

* @return the box

*/

public static Box createVerticalBox() {

return new Box(BoxLayout.Y_AXIS);

}二十二、Box 容器代码示例代码示例 :

代码语言:javascript代码运行次数:0运行复制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 容器中添加分割代码示例 :

代码语言:javascript代码运行次数:0运行复制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);

}

}执行结果 :

改变窗口大小后的效果 :

相关推荐

《CS:GO》Csgo降ping指南 四个方面解析

《CS:GO》Csgo降ping指南 四个方面解析

必定赢365线路检测 06-29
阅读更多
陋的解释

陋的解释

365体育投注365bet 07-04
阅读更多
苹果手机为什么会掉漆(苹果手机掉漆原因揭秘)

苹果手机为什么会掉漆(苹果手机掉漆原因揭秘)

365 体育投注 07-15
阅读更多