`

布局管理器(六)——BoxLayout

阅读更多

        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布局管理器 java 如何使用BoxLayout布局管理器

    MFC布局管理器

    实现了一个MFC的盒子布局管理器类CBoxLayout

    java Swing布局管理之BoxLayout布局

    主要为大家详细介绍了java Swing布局管理之BoxLayout布局的相关资料,感兴趣的小伙伴们可以参考一下

    java gui 盒子布局实列

    java GUI 布局管理器 盒子布局的实列(BoxLayout)

    Java Swing组件BoxLayout布局用法示例

    主要介绍了Java Swing组件BoxLayout布局用法,结合实例形式分析了Swing使用BoxLayout容器进行布局的相关方法与操作技巧,需要的朋友可以参考下

    java swing-BoxLayout的使用

    BoxLayout 是 Java Swing 库提供的一种布局管理器,用于在容器中沿着水平或垂直方向排列组件。 BoxLayout 的特点如下: 可以选择水平(X_AXIS)或垂直(Y_AXIS)方向进行排列。 组件按照添加的顺序依次排列,可以...

    java BoxLayout示例

    java se 自学过程中遇到的一些疑惑不解的地方,解决了之后把经验保留下课,分享给大家

    windowbuilder中layout介绍

    WindowBuilder 提供了 LayoutManager,这是一个布局管理器,负责管理 GUI 组件的布局和位置。Layout Managers 的优点是: 1. 提供独立于字体、屏幕分辨率、平台差异性的组件 2. 组件的位置和尺寸在运行时动态可调 3...

    Java_swing布局详解(附示例图).doc

    图形化轻量级框架开发,当选择使用JPanel和顶层容器的content pane时,需要考虑布局管理。...下面将分别介绍几种最常用的布局管理器:FlowLayout、BorderLayout、BoxLayout、CardLayout、GridLayout和GridBagLayout。

    Java Swing BoxLayout箱式布局的实现代码

    主要介绍了Java Swing BoxLayout箱式布局的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    Java中BoxLayout的一个简单例子

    提供了一个简单的BoxLayout例子。

    Java中使用BoxLayout实现组件的垂直分布

    Java中使用BoxLayout实现组件的垂直分布

    CSS3 flex布局之快速实现BorderLayout布局

    学习完flex的布局模式之后,我们趁热打铁,来实现一个BoxLayout布局.什么是BoxLayout布局?那我们先上一个图看看 BoxLayout布局写过后端UI代码的编程者应该不陌生了,写前端的代码的也同样很熟悉,包括html的框架frame....

    JAVA 车辆管理信息系统

    系统界面使用 BorderLayout 和 BoxLayout 布局,数据录入和查询方面使用 Access 数据库。 3. 功能设计 本系统共有 34 个类,包括登陆系统、车辆信息管理、维修信息管理、司机信息管理、事故信息管理、运营信息管理...

    javaSE代码实例

    第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 BoxLayout中创建空白

    使用java swing创建空白的一些方法。除了我在代码中提到的内容,你也可以自己尝试使用Box.createRigidArea(Dimension d)的方法。

    fview-boxlayout:IjzerenHein 著名的 boxlayout 的 Meteor Famous Views 插件

    FView BoxLayout 插件 这是一个基于的插件。 演示 原始演示托管,你可以找到这个项目演示。 用法 使用 BoxLayout 的最详尽(但也是基本的)示例。 { {#BoxLayout margins= [] } } { { &gt; Surface target= " top...

    PyQt5 Python 桌面应用程序源码.zip

    2 PyQt5布局管理 绝对定位框布局 Boxlayout表格布局 QGridLayout评论的例子 PyQt5布局有两种方式,绝对定位和布局类 绝对定位 程序指定每个控件的位置和大小(以像素为单位) 3 PyQt5菜单和工具栏 主窗口状态栏菜单栏...

    java程序设计填空题题库49道

    43. 框架(JFrame)和面板(JPanel)的默认布局管理器分别是______和_______。 答案:BorderLayout FlowLayout [考点范围] 图形用户界面 44. Swing的布局管理器主要包括_______。 答案:FlowLayout、BorderLayout、...

    java初学者必看

    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...

Global site tag (gtag.js) - Google Analytics