java图形界面box_Java图形界面开发:高级Swing容器(一)

本文详细介绍了Java Swing中的Box容器和JSplitPane组件。Box类简化了使用BoxLayout布局管理器的过程,提供了创建单行或单列组件的便捷方式,包括Box的创建、属性和Box.Filler的使用。JSplitPane则允许展示两个组件并可通过拖动分隔栏调整大小,文章阐述了JSplitPane的创建、属性以及监听分隔符变化的方法。
摘要由CSDN通过智能技术生成

第10章探讨了AWT与Swing中的布局管理器。在本章中,我们将会了解一些构建在这些布局管理器之上的容器以及其他的一些无需布局管理器的容器。

我们的探讨由Box类开始,我们将会发现使用BoxLayout管理器来创建一个单行或单列组件的最好方法。接下来我们会了解JSplitPane容器,他类似于其中只有两个组件的特殊的Box。JSplitPane提供了一个分隔栏,用户可以拖动这个分隔栏来调整组件的大小以满足各自的需求。

然后我们会探讨JTabbedPane容器,其工作方工式类似于一个由CardLayout布局管理器管理的容器,所不同的是容器内建的标签可以使得我们由一个卡片移动到一个卡片。我们也可以使用JTabbedPane创建多个屏幕,属性页对话框用于用户输入。

最后讨论的两个高级Swing容器是JScrollPane与JViewport。这两个组件都提供了在有限的屏幕真实状态之内显示大组件集合的能力。JScrollPane为显示区域添加滚动条,从而我们可以在一个小区域内在大组件周围移动。事实上,JScrollPane使用JViewport来分割本看不见的大组件部分。

下面我们就开始了解第一个容器,Box类。

11.1 Box类

作为JComponent类的子类,Box类是借助于BoxLayout管理器创建单行或单列组件的一个特殊Java Container。Box容器的作用类似于JPanel(或Panel),但是具有一个不同的默认布局管理器,BoxLayout。在Box之外使用BoxLayout有一些麻烦,而Box简化了BoxLayout的使用。我们只需三步就可以将BoxLayout管理器与容器相关联:手动创建容器,创建布局管理器,然后将管理器与容器相关联。当我们创建一个Box的实例时,我们一次就执行了这三个步骤。另外,我们可以使用Box的名为Box.Filler的内联类来更好的放置容器内的组件。

11.1.1 创建Box

我们有三种方法来创建Box,一个构造函数以及两个静态工厂方法:

publicBox(intdirection)

Box horizontalBox =newBox(BoxLayout.X_AXIS);

Box verticalBox   =newBox(BoxLayout.Y_AXIS);

publicstaticBox createHorizontalBox()

Box horizontalBox = Box.createHorizontalBox();

publicstaticBox createVerticalBox()

Box verticalBox   = Box.createVerticalBox();

注意 ,Box类并没有被设计用来作为JavaBean组件使用。在IDE中这个容器的使用十分笨拙。

不经常使用的构造函数需要布局管理器主坐标的方向。这个方向是通过BoxLayout的两个常量来指定的:X_AXIS或Y_AXIS,分别用来创建水平或垂直盒子。我们无需手动指定方向,我们可以简单的通过所提供的工厂方法来创建所需方向的盒子:createHorizontalBox()或createVerticalBox()。

使用JLabel,JTextField与JButton填充一个水平与垂直Box演示了BoxLayout的灵活性,如图11-1所示。

a3c1584523afd524292ce0c5c59533c0.png

对于水平容器,标签与按钮以其最优的宽度显示,因为他们的最大尺寸与最优尺寸相同。文本域使用余下的空间。

在垂直容器中,标签与按钮的尺寸也是他们的最优尺寸,因为他们的最大尺寸依然与他们的最优尺寸相同。文本的高度填充了标签与按钮没有使用的高度,而其宽度与容器的宽度相同。

用于创建图11-1所示屏幕的源码显示在列表11-1中。

packageswingstudy.ch11;

importjava.awt.BorderLayout;

importjava.awt.EventQueue;

importjavax.swing.Box;

importjavax.swing.JButton;

importjavax.swing.JFrame;

importjavax.swing.JLabel;

importjavax.swing.JTextField;

publicclassBoxSample {

/**

* @param args

*/

publicstaticvoidmain(String[] args) {

// TODO Auto-generated method stub

Runnable runner =newRunnable() {

publicvoidrun() {

JFrame verticalFrame =newJFrame("Vertical");

verticalFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Box verticalBox = Box.createVerticalBox();

verticalBox.add(newJLabel("Top"));

verticalBox.add(newJTextField("Middle"));

verticalBox.add(newJButton("Bottom"));

verticalFrame.add(verticalBox, BorderLayout.CENTER);

verticalFrame.setSize(150,150);

verticalFrame.setVisible(true);

JFrame horizontalFrame =newJFrame("Horizontal");

horizontalFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Box horizontalBox = Box.createHorizontalBox();

horizontalBox.add(newJLabel("Left"));

horizontalBox.add(newJTextField("Middle"));

horizontalBox.add(newJButton("Right"));

horizontalFrame.add(horizontalBox, BorderLayout.CENTER);

horizontalFrame.setSize(150,150);

horizontalFrame.setVisible(true);

}

};

EventQueue.invokeLater(runner);

}

}

11.1.2 Box属性

如表11-1所示,Box只有两个属性。尽管布局属性由其父类C

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值