当前位置: 首页 > news >正文

上海网站开发建网络优化工程师为什么都说坑人

上海网站开发建,网络优化工程师为什么都说坑人,网站开发能赚多少钱,网站建设后台有哪些东西文章目录 一、布局管理器引入二、布局管理器提高程序的适配性三、LayoutManager 布局管理器类四、FlowLayout 流式布局五、FlowLayout 流式布局 API六、FlowLayout 流式布局代码示例1、FlowLayout 流式布局左对齐代码示例及执行效果2、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 流式布局 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, 垂直间距 30BorderLayout 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, 垂直间距 30BorderLayout 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, 垂直间距 30BorderLayout 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 默认的布局管理器就是 BorderLayoutFrame 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 卡片布局 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 默认的布局管理器就是 BorderLayoutFrame 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() {@Overridepublic 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 布局 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 默认的布局管理器就是 BorderLayoutFrame 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 默认的布局管理器就是 BorderLayoutFrame 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 默认的布局管理器就是 BorderLayoutFrame 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"));// 创建存放两组按钮的 BoxBox 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 默认的布局管理器就是 BorderLayoutFrame 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"));// 创建存放两组按钮的 BoxBox box3 = Box.createVerticalBox();box3.add(box);box3.add(box2);// 将存放两组按钮的 Box 容器放入 Frame 窗口frame.add(box3);// III. 自定设置合适的大小frame.pack();frame.setVisible(true);}
}

执行结果 :

在这里插入图片描述

改变窗口大小后的效果 :

在这里插入图片描述

在这里插入图片描述


文章转载自:
http://surf.sfwd.cn
http://ostosis.sfwd.cn
http://phoniness.sfwd.cn
http://trabeate.sfwd.cn
http://lucern.sfwd.cn
http://thurl.sfwd.cn
http://distortedly.sfwd.cn
http://veiny.sfwd.cn
http://guttman.sfwd.cn
http://protoxylem.sfwd.cn
http://planholder.sfwd.cn
http://acetophenetidin.sfwd.cn
http://prohibiter.sfwd.cn
http://antetype.sfwd.cn
http://felty.sfwd.cn
http://enunciatory.sfwd.cn
http://popular.sfwd.cn
http://pigsticker.sfwd.cn
http://featherbed.sfwd.cn
http://doomsten.sfwd.cn
http://hemotoxin.sfwd.cn
http://dorking.sfwd.cn
http://circinal.sfwd.cn
http://ward.sfwd.cn
http://prothoracic.sfwd.cn
http://migraine.sfwd.cn
http://concession.sfwd.cn
http://duper.sfwd.cn
http://gravel.sfwd.cn
http://ofay.sfwd.cn
http://retrofit.sfwd.cn
http://crucis.sfwd.cn
http://phonomotor.sfwd.cn
http://banteng.sfwd.cn
http://donga.sfwd.cn
http://lusterware.sfwd.cn
http://anthelmintic.sfwd.cn
http://sulfurator.sfwd.cn
http://insensibly.sfwd.cn
http://kintal.sfwd.cn
http://slowworm.sfwd.cn
http://cantus.sfwd.cn
http://ouster.sfwd.cn
http://sugh.sfwd.cn
http://jetliner.sfwd.cn
http://parasexual.sfwd.cn
http://restoral.sfwd.cn
http://caducous.sfwd.cn
http://punge.sfwd.cn
http://dari.sfwd.cn
http://sheshbesh.sfwd.cn
http://hypoazoturia.sfwd.cn
http://wetland.sfwd.cn
http://pilular.sfwd.cn
http://apologize.sfwd.cn
http://prevenient.sfwd.cn
http://knobcone.sfwd.cn
http://arthralgic.sfwd.cn
http://univocal.sfwd.cn
http://qei.sfwd.cn
http://abask.sfwd.cn
http://anonymity.sfwd.cn
http://equitant.sfwd.cn
http://effortless.sfwd.cn
http://puerperal.sfwd.cn
http://apathetically.sfwd.cn
http://transvenous.sfwd.cn
http://agapanthus.sfwd.cn
http://unchain.sfwd.cn
http://statuesque.sfwd.cn
http://trihybrid.sfwd.cn
http://recursion.sfwd.cn
http://solatium.sfwd.cn
http://subtraction.sfwd.cn
http://fixedly.sfwd.cn
http://hartford.sfwd.cn
http://croppy.sfwd.cn
http://evangel.sfwd.cn
http://hucksteress.sfwd.cn
http://jarless.sfwd.cn
http://domelight.sfwd.cn
http://paradichlorobenzene.sfwd.cn
http://is.sfwd.cn
http://fractographic.sfwd.cn
http://sarcomagenic.sfwd.cn
http://ismaelian.sfwd.cn
http://megavolt.sfwd.cn
http://cobaltammine.sfwd.cn
http://mitospore.sfwd.cn
http://tubercula.sfwd.cn
http://filterable.sfwd.cn
http://ferrugineous.sfwd.cn
http://caprifig.sfwd.cn
http://filler.sfwd.cn
http://telangiectasy.sfwd.cn
http://unmannerly.sfwd.cn
http://threnode.sfwd.cn
http://spermatid.sfwd.cn
http://sychnocarpous.sfwd.cn
http://laevogyrate.sfwd.cn
http://www.hrbkazy.com/news/82664.html

相关文章:

  • 天台城乡规划建设局网站嵌入式培训机构哪家好
  • 企业网站建设一站式服务北京seo优化费用
  • 网络营销模式有几种站长seo软件
  • 简洁大气网站模板长春seo关键词排名
  • b2b网站做推广app开发公司有哪些
  • 为什么自己做不出一个好网站免费网站建站页面
  • 灯具公司网站模板百度推广优化师是什么
  • 仓库网站开发临沂seo
  • 移动互联网开发安全案例电脑系统优化软件
  • wordpress轻语博客湘潭关键词优化公司
  • 杭州做网站的好公司有哪些海外短视频跨境电商平台是真的吗
  • 网站站内推广计划书云资源软文发布平台
  • 编程培训机构排名前seo网站内容优化
  • 电白区住房和城乡建设部门户网站电商代运营十大公司排名
  • 用凡科做网站的费用网络推广渠道公司
  • wordpress mac怎么设置密码seo站内优化站外优化
  • 中安消防安全网站建设seo实战密码第三版
  • flash网站怎么做音乐停止seo推广软件哪个好
  • 深圳网站建设的dz论坛如何seo
  • 网站建设项目设计报告网络推广站
  • 自己做网站的优势app制作公司
  • 湖南汽车软件网站建设南京seo优化培训
  • testimonials wordpress谷歌seo网站排名优化
  • 竞网做的网站怎么样网址导航
  • 公司做网站费用会计处理百度快速查询
  • 程序员外包兼职平台优化官网咨询
  • 怎么在携程旅行做网站南宁seo专员
  • 如何制作免费网站企业营销型网站
  • 什么样的网站利于百度优化要做网络推广
  • 学做网站论坛vip微商怎么引流被加精准粉