BoxLayout与其他布局管理器稍有不同,必须向其构造函数中传递容器实例的引用,由该容器使用BoxLayout。另外必须指定BoxLayout
中组件的布局方式:垂直排列(按列)或水平排列(按行)。用水平组件和垂直组件的不同组合嵌套多面板的作用类似于
GridBagLayout,但没那么复杂。
BoxLayout 管理器是用 axis 参数构造的,该参数指定了将进行的布局类型。有四个选择:
X_AXIS
:从左到右水平布置组件。
Y_AXIS
:从上到下垂直布置组件。
LINE_AXIS
:根据容器的 ComponentOrientation 属性,按照文字在一行中的排列方式布置组件。如果容器的
ComponentOrientation 表示水平,则将组件水平放置,否则将它们垂直放置。对于水平方向,如果容器的
ComponentOrientation 表示从左到右,则组件从左到右放置,否则将它们从右到左放置。对于垂直方向,组件总是从上到下放置的。
PAGE_AXIS
:根据容器的 ComponentOrientation 属性,按照文本行在一页中的排列方式布置组件。如果容器的
ComponentOrientation 表示水平,则将组件垂直放置,否则将它们水平放置。对于水平方向,如果容器的
ComponentOrientation 表示从左到右,则组件从左到右放置,否则将它们从右到左放置。对于垂直方向,组件总是从上向下放置的。
容器尺寸:如果使用垂直属性,容器高度为子组件高度之和,宽度为最宽子组件的宽度;使用水平属性,宽度为子组件宽度之和,高度为最高子组件的高度。
一个小例子如下:
import java.awt.*;
import javax.swing.*;
public class BoxLayoutTest {
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
}
JFrame frame = new JFrame("BoxLayout Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container panel = frame.getContentPane();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
for (float align = 0.0f; align <= 1.0f; align += 0.25f) {
JButton button = new JButton("X align = " + align);
button.setAlignmentX(align);
panel.add(button);
}
frame.setSize(400, 300);
frame.setVisible(true);
}
}
除BoxLayout之外,Swing中还包含Box类,该类提供BoxLayout所需功能。Box类是java.awt.Container的子类,
方便时可以将其实例用作可视组件,Box 类是使用 BoxLayout 的轻量级容器。它还提供了一些帮助,要获取想要的排列,将组件添加到多个嵌套的
box 中是一种功能强大的方法。因此许多程序使用 Box 类,而不是直接使用 BoxLayout。
Box提供了很多静态工厂方法,用于创建各种组件实例,便于使用BoxLayout。Box工厂还能创建几种影响布局的透明组件,添加到
BoxLayout管理容器中的透明组件能够在其他组件之间形成间隔,这三种透明组件分别是:
rigid(刚性组件)、glue(胶水组件)和struts(支柱组件)。
1.rigid:透明组件,该组件的最大尺寸和最小尺寸相等,即大小固定。创建时候必须先调用Box的createRigidArea(Dimension d)
for (float align = 0.0f; align <= 1.0f; align += 0.25f) {
JButton button = new JButton("X align = " + align);
button.setAlignmentX(align);
panel.add(button);
panel.add(Box.createRigidArea(new Dimension(0, 15)));
}
2.glue:透明组件,与刚性组件不同的是,胶水组件创建时不允许指定尺寸,因为胶水组件使用的是为占用的空间。创建胶水对象时调用的方法取决于所用的BoxLayout的方向,对于垂直方向应该调用
createVerticalGlue()对象,对于创建水平的容器则应该使用createHorizontalGlue()方法。胶水对象会填满容器中的所有多余的水平空间或者垂直空间,从而消除容器底部或右边的空白,且这些空间会被平均分配给胶水组件。
for (float align = 0.0f; align <= 1.0f; align += 0.25f) {
JButton button = new JButton("X align = " + align);
button.setAlignmentX(align);
panel.add(button);
panel.add(Box.createVerticalGlue());
}
3.strut:支柱组件与刚性区域相似,但有个重要区别,支柱仅指定单个方向的尺寸,而不同时候指定宽度
(createHorizontalStrut)和高度(createVerticalStrut),支柱将指定值作为柱长方向的最小尺寸、首选尺寸和最
大尺寸,而另一个方向的最小尺寸和首选尺寸都是0。Box会将令一个方向的最大尺寸设为较大值,这样的分配结果可能很不理想,确切的说,如果
BoxLayout中存在很大的支柱组件,则会使容器的分配尺寸大于容器的设计尺寸。由于刚性区域能能够提供相同的功能,且使用支柱组件可能会有潜在的问
题,所以应该避免使用支柱而换用刚性组件。
参考:
1.《
Pro Java Programming(Second Edition)
》
2.《
Core Java I
》
分享到:
相关推荐
java 如何使用BoxLayout布局管理器 java 如何使用BoxLayout布局管理器
实现了一个MFC的盒子布局管理器类CBoxLayout
主要为大家详细介绍了java Swing布局管理之BoxLayout布局的相关资料,感兴趣的小伙伴们可以参考一下
java GUI 布局管理器 盒子布局的实列(BoxLayout)
主要介绍了Java Swing组件BoxLayout布局用法,结合实例形式分析了Swing使用BoxLayout容器进行布局的相关方法与操作技巧,需要的朋友可以参考下
BoxLayout 是 Java Swing 库提供的一种布局管理器,用于在容器中沿着水平或垂直方向排列组件。 BoxLayout 的特点如下: 可以选择水平(X_AXIS)或垂直(Y_AXIS)方向进行排列。 组件按照添加的顺序依次排列,可以...
java se 自学过程中遇到的一些疑惑不解的地方,解决了之后把经验保留下课,分享给大家
WindowBuilder 提供了 LayoutManager,这是一个布局管理器,负责管理 GUI 组件的布局和位置。Layout Managers 的优点是: 1. 提供独立于字体、屏幕分辨率、平台差异性的组件 2. 组件的位置和尺寸在运行时动态可调 3...
图形化轻量级框架开发,当选择使用JPanel和顶层容器的content pane时,需要考虑布局管理。...下面将分别介绍几种最常用的布局管理器:FlowLayout、BorderLayout、BoxLayout、CardLayout、GridLayout和GridBagLayout。
主要介绍了Java Swing BoxLayout箱式布局的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
提供了一个简单的BoxLayout例子。
Java中使用BoxLayout实现组件的垂直分布
学习完flex的布局模式之后,我们趁热打铁,来实现一个BoxLayout布局.什么是BoxLayout布局?那我们先上一个图看看 BoxLayout布局写过后端UI代码的编程者应该不陌生了,写前端的代码的也同样很熟悉,包括html的框架frame....
系统界面使用 BorderLayout 和 BoxLayout 布局,数据录入和查询方面使用 Access 数据库。 3. 功能设计 本系统共有 34 个类,包括登陆系统、车辆信息管理、维修信息管理、司机信息管理、事故信息管理、运营信息管理...
第14章 集合框架——强大的对象管理器 270 14.1 Object类——所有类的超类 270 14.1.1 toString方法的重写 270 14.1.2 equals方法的意义 271 14.1.3 hashCode方法的意义 272 14.2 重写equals与hashCode...
使用java swing创建空白的一些方法。除了我在代码中提到的内容,你也可以自己尝试使用Box.createRigidArea(Dimension d)的方法。
FView BoxLayout 插件 这是一个基于的插件。 演示 原始演示托管,你可以找到这个项目演示。 用法 使用 BoxLayout 的最详尽(但也是基本的)示例。 { {#BoxLayout margins= [] } } { { > Surface target= " top...
2 PyQt5布局管理 绝对定位框布局 Boxlayout表格布局 QGridLayout评论的例子 PyQt5布局有两种方式,绝对定位和布局类 绝对定位 程序指定每个控件的位置和大小(以像素为单位) 3 PyQt5菜单和工具栏 主窗口状态栏菜单栏...
43. 框架(JFrame)和面板(JPanel)的默认布局管理器分别是______和_______。 答案:BorderLayout FlowLayout [考点范围] 图形用户界面 44. Swing的布局管理器主要包括_______。 答案:FlowLayout、BorderLayout、...
13.4.3 BoxLayout布局管理器 13.4.4 GridLayout布局管理器 13.5 事件处理 13.5.1 事件监听器 13.5.2 事件适配器 13.5.3 事件 13.6 举例 13.6.1 界面设计 13.6.2 运算设计步骤 13.7 本章习题 第14章 Java I...