`

布局管理器(六)——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

分享到:
评论

相关推荐

    GUI编程技术-布局管理.doc

    #### 六、Box布局——BoxLayout **1. 基本概念** `BoxLayout`提供了一种基于容器的线性布局方式,可以沿水平或垂直方向放置组件。它适合于创建复杂的布局结构,尤其是需要保持一定间距的组件。 **2. 构造方法** ...

    swing-layout-1.0.jar

    `swing-layout-1.0.jar`库文件提供了一个额外的布局管理器——`BoxLayout2`,它是对Java标准库中`BoxLayout`的增强。`BoxLayout2`允许开发者在容器的任意轴上进行布局,并且增加了更多的对齐选项和间距控制。此外,...

    Java开发——qq图片.zip

    7. **布局管理**: QQ应用的界面布局可能涉及到Java GUI的布局管理器,如FlowLayout、BorderLayout、GridLayout、GridBagLayout或BoxLayout。布局管理器帮助自动调整组件的位置和大小,以适应窗口的变化。 8. **事件...

    Java.Swing图形界面开发与案例详解.王鹏等——第8章

    常见的布局管理器有FlowLayout、BorderLayout、GridLayout、CardLayout和BoxLayout等。例如,FlowLayout按顺序将组件水平或垂直排列;BorderLayout将容器分为五个区域:北、南、东、西和中心,每个区域只能放置一个...

    matlab GUI设计——打靶

    同时,理解布局管理器如GridBagLayout和BoxLayout,用于实现控件的自动排列。 2. **回调函数**:回调函数是MATLAB GUI的核心,当用户与GUI交互时,如点击按钮或改变滑块值,MATLAB会调用对应的回调函数执行相应的...

    TableLayout.jar

    《TableLayout.jar——Swing布局管理器的高效选择》 在Java Swing开发中,界面布局管理是构建用户界面的关键部分,它决定了组件在窗口中的排列和对齐方式。`TableLayout.jar`是一个强大的布局管理器,它为开发者...

    Java大学简明教程——实例程序设计

    7. **布局管理器**:掌握FlowLayout、BorderLayout、GridLayout、BoxLayout以及GridBagLayout等布局管理器的用法,以合理组织组件。 8. **事件监听**:学习事件源、事件监听器和事件处理器的概念,编写事件处理代码...

    合工大java实验报告

    布局管理器方面,AWT提供了FlowLayout、BorderLayout、GridLayout等,而Swing在AWT基础上增加了更多布局选择,如BoxLayout和 MigLayout,使得界面设计更加灵活和美观。 总结,这个实验报告详细记录了学生在Java GUI...

    JAVA版扫雷游戏——仿XP下的扫雷

    - **布局管理器**:控制窗口中各组件的位置和大小,如GridLayout、FlowLayout或BoxLayout。 3. **算法与数据结构** - **邻接矩阵**:用二维数组表示雷区,记录每个格子周围的雷数,方便计算和更新。 - **深度...

    基于Java +Swing的员工工资管理系统.rar

    9. **GUI布局管理**:Swing提供了几种布局管理器,如FlowLayout、GridLayout、BorderLayout和BoxLayout,用于自动调整组件的位置和大小,以适应不同分辨率的屏幕。 10. **用户验证与权限控制**:为了确保数据安全,...

    售楼管理系统 java-swing

    Swing还支持布局管理器,如FlowLayout、BorderLayout、GridLayout和BoxLayout,它们帮助我们组织和定位组件。在设计售楼系统界面时,开发者可能会结合使用多种布局,以实现灵活的界面布局。 此外,Swing还提供了...

    java图形界面设计实验

    7. **布局管理器运用**:全面掌握五种常用布局管理器——`FlowLayout`, `BorderLayout`, `CardLayout`, `GridLayout`, `GridBagLayout`的特性及适用场景,理解其默认布局逻辑。 8. **布局比较与选择**:对比不同...

    Java图形界面示例程序 —— 问卷调查表

    4. **Swing布局管理器**: 为了在界面上组织组件,开发者会使用Swing的布局管理器,如FlowLayout、BorderLayout、GridLayout或BoxLayout。登录界面可能采用了适合两个输入字段和一个按钮的布局。 5. **对话框...

    JAVA程序设计教程第七章代码

    3. **布局管理器(Layout Managers)**:Java提供了多种布局管理器,如FlowLayout、BorderLayout、GridLayout、GridBagLayout和BoxLayout,用于自动排列容器中的组件。每种布局管理器都有其特定的规则和用途,选择...

    java实践期末项目swing有界面图书管理程序

    Swing组件包括JButton、JLabel、JFrame、JTable、JTextArea等,它们通过容器的布局管理器(如FlowLayout、BorderLayout、GridLayout、BoxLayout和GridBagLayout)进行组织和定位。例如,登录界面可能使用...

    一物图书管理系统,JAVA作业 使用JAVA GUI,使用Mysql存储数据 增删改查 UI还行

    设计者可能使用了BorderLayout、GridLayout或BoxLayout等布局管理器,合理分配了窗口中的组件位置。同时,可能采用了事件监听机制,使用户可以通过点击按钮或输入信息触发相应的业务逻辑。 5. **项目结构与源代码...

    企业进销存管理系统(Java Swing+SQL2000)

    开发者可以利用Swing的JFrame、JPanel、JButton、JTable等组件构建出直观、易用的操作界面,同时,通过Swing的布局管理器,如BorderLayout、GridLayout和BoxLayout,可以灵活地组织和调整组件的位置,以满足不同用户...

    很好的进销存管理系统

    Swing的组件包括JButton、JLabel、JTextField、JTable等,它们可以方便地进行布局管理,如BorderLayout、GridLayout、FlowLayout和BoxLayout等。Swing还支持事件处理,使得用户交互更加便捷。 二、进销存管理系统...

    Flex中文帮助文档,绝对实用

    - **布局管理**: Flex提供了多种布局管理器,如BoxLayout、TileLayout、VGroup和HGroup等,用于控制组件在容器中的排列方式。 - **错误处理和调试**: 可能会涉及Flex应用程序中的错误处理策略和调试技巧,帮助...

    studentManage.7z

    4. **布局管理**:为了使界面看起来整洁有序,开发者会使用Swing的布局管理器,如FlowLayout、GridLayout、BorderLayout和BoxLayout,来决定组件在窗口中的位置和大小。 5. **数据验证**:在输入学生信息时,系统...

Global site tag (gtag.js) - Google Analytics