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
》
分享到:
相关推荐
#### 六、Box布局——BoxLayout **1. 基本概念** `BoxLayout`提供了一种基于容器的线性布局方式,可以沿水平或垂直方向放置组件。它适合于创建复杂的布局结构,尤其是需要保持一定间距的组件。 **2. 构造方法** ...
`swing-layout-1.0.jar`库文件提供了一个额外的布局管理器——`BoxLayout2`,它是对Java标准库中`BoxLayout`的增强。`BoxLayout2`允许开发者在容器的任意轴上进行布局,并且增加了更多的对齐选项和间距控制。此外,...
7. **布局管理**: QQ应用的界面布局可能涉及到Java GUI的布局管理器,如FlowLayout、BorderLayout、GridLayout、GridBagLayout或BoxLayout。布局管理器帮助自动调整组件的位置和大小,以适应窗口的变化。 8. **事件...
常见的布局管理器有FlowLayout、BorderLayout、GridLayout、CardLayout和BoxLayout等。例如,FlowLayout按顺序将组件水平或垂直排列;BorderLayout将容器分为五个区域:北、南、东、西和中心,每个区域只能放置一个...
同时,理解布局管理器如GridBagLayout和BoxLayout,用于实现控件的自动排列。 2. **回调函数**:回调函数是MATLAB GUI的核心,当用户与GUI交互时,如点击按钮或改变滑块值,MATLAB会调用对应的回调函数执行相应的...
《TableLayout.jar——Swing布局管理器的高效选择》 在Java Swing开发中,界面布局管理是构建用户界面的关键部分,它决定了组件在窗口中的排列和对齐方式。`TableLayout.jar`是一个强大的布局管理器,它为开发者...
7. **布局管理器**:掌握FlowLayout、BorderLayout、GridLayout、BoxLayout以及GridBagLayout等布局管理器的用法,以合理组织组件。 8. **事件监听**:学习事件源、事件监听器和事件处理器的概念,编写事件处理代码...
布局管理器方面,AWT提供了FlowLayout、BorderLayout、GridLayout等,而Swing在AWT基础上增加了更多布局选择,如BoxLayout和 MigLayout,使得界面设计更加灵活和美观。 总结,这个实验报告详细记录了学生在Java GUI...
- **布局管理器**:控制窗口中各组件的位置和大小,如GridLayout、FlowLayout或BoxLayout。 3. **算法与数据结构** - **邻接矩阵**:用二维数组表示雷区,记录每个格子周围的雷数,方便计算和更新。 - **深度...
9. **GUI布局管理**:Swing提供了几种布局管理器,如FlowLayout、GridLayout、BorderLayout和BoxLayout,用于自动调整组件的位置和大小,以适应不同分辨率的屏幕。 10. **用户验证与权限控制**:为了确保数据安全,...
Swing还支持布局管理器,如FlowLayout、BorderLayout、GridLayout和BoxLayout,它们帮助我们组织和定位组件。在设计售楼系统界面时,开发者可能会结合使用多种布局,以实现灵活的界面布局。 此外,Swing还提供了...
7. **布局管理器运用**:全面掌握五种常用布局管理器——`FlowLayout`, `BorderLayout`, `CardLayout`, `GridLayout`, `GridBagLayout`的特性及适用场景,理解其默认布局逻辑。 8. **布局比较与选择**:对比不同...
4. **Swing布局管理器**: 为了在界面上组织组件,开发者会使用Swing的布局管理器,如FlowLayout、BorderLayout、GridLayout或BoxLayout。登录界面可能采用了适合两个输入字段和一个按钮的布局。 5. **对话框...
3. **布局管理器(Layout Managers)**:Java提供了多种布局管理器,如FlowLayout、BorderLayout、GridLayout、GridBagLayout和BoxLayout,用于自动排列容器中的组件。每种布局管理器都有其特定的规则和用途,选择...
Swing组件包括JButton、JLabel、JFrame、JTable、JTextArea等,它们通过容器的布局管理器(如FlowLayout、BorderLayout、GridLayout、BoxLayout和GridBagLayout)进行组织和定位。例如,登录界面可能使用...
设计者可能使用了BorderLayout、GridLayout或BoxLayout等布局管理器,合理分配了窗口中的组件位置。同时,可能采用了事件监听机制,使用户可以通过点击按钮或输入信息触发相应的业务逻辑。 5. **项目结构与源代码...
开发者可以利用Swing的JFrame、JPanel、JButton、JTable等组件构建出直观、易用的操作界面,同时,通过Swing的布局管理器,如BorderLayout、GridLayout和BoxLayout,可以灵活地组织和调整组件的位置,以满足不同用户...
Swing的组件包括JButton、JLabel、JTextField、JTable等,它们可以方便地进行布局管理,如BorderLayout、GridLayout、FlowLayout和BoxLayout等。Swing还支持事件处理,使得用户交互更加便捷。 二、进销存管理系统...
- **布局管理**: Flex提供了多种布局管理器,如BoxLayout、TileLayout、VGroup和HGroup等,用于控制组件在容器中的排列方式。 - **错误处理和调试**: 可能会涉及Flex应用程序中的错误处理策略和调试技巧,帮助...
4. **布局管理**:为了使界面看起来整洁有序,开发者会使用Swing的布局管理器,如FlowLayout、GridLayout、BorderLayout和BoxLayout,来决定组件在窗口中的位置和大小。 5. **数据验证**:在输入学生信息时,系统...