Java AWT编程 布局管理器(六)BoxLayout

BoxLayout是Swing提供的布局管理器,所以用于管理Swing组件将会有更好的表现。

GridBagLayout布局管理器虽然功能强大,但它实在太复杂了,所以Swing引入了一个新的布局管理器:BoxLayout,它保留了GridBagLayout的很多优点,但是却没那么复杂。BoxLayout可以再垂直和水平两个方向上摆放GUI组件,BoxLayout提供了如下一个简单的构造器。

BoxLayout提供了一个简单的构造器:

BoxLayout(Container target, int axis):指定创建基于target容器的BoxLayout布局管理器,该布局管理器里的组件按axis方向排列。其中axis有BoxLayout.X_AXIS(横向)和BoxLayout.Y_AXIS(纵向)两个方向。

/**
 * 程序简单示范了使用BoxLayout布局管理器来控制容器中按钮的布局
 */
package codes11;

import java.awt.Button;
import java.awt.Frame;

import javax.swing.BoxLayout;

public class BoxLayoutTest {

	private Frame f = new Frame("测试窗口");

	public void init() {
		f.setLayout(new BoxLayout(f, BoxLayout.Y_AXIS));
		f.add(new Button("第一个按钮"));
		f.add(new Button("按钮二"));
		f.pack();
		f.setVisible(true);
	}

	public static void main(String[] args) {
		new BoxLayoutTest().init();
	}

}
运行程序,结果如下图:

BoxLayout通常和Box容器结合使用,Box是一个特殊的容器,他有点像Panel容器,但该容器默认使用BoxLayout布局管理器。

Box提供了两个静态方法来创建Box 对象:

(1)createHorizontalBox():创建一个水平排列组件的Box容器

(2)createBerticalBox():创建一个垂直排列组件的Box容器

一旦获取了Box容器之后,就可以使用Box来盛装普通的GUI组件,然后将这些Box组件添加到其它容器中,从而形成整体的窗口布局。

/**
 * 程序示范了如何使用Box容器
 */
package codes11;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;

import javax.swing.Box;

public class BoxTest {

	private Frame f = new Frame("测试");
	// 定义水平摆放组件的Box对象
	private Box horizontal = Box.createHorizontalBox();
	// 定义水平摆放组件的Box对象
	private Box vertical = Box.createVerticalBox();

	public void init() {
		horizontal.add(new Button("水平按钮一"));
		horizontal.add(new Button("水平按钮二"));
		vertical.add(new Button("垂直按钮一"));
		vertical.add(new Button("垂直按钮二"));
		f.add(horizontal, BorderLayout.NORTH);
		f.add(vertical);
		f.pack();
		f.setVisible(true);
	}

	public static void main(String[] args) {
		new BoxTest().init();
	}

}
运行程序,结果如下图:

BoxLayout没有提供设置间距的构造方法,因为BoxLayout采用另一种方式来控制组件的间距——BoxLayout使用Glue(橡胶)、Strut(支架)和RigidArea(刚性区域)的组件来控制组件间的间距。其中Glue代表可以在横向、纵向两个方向上同时拉伸的空白组件(间距),Strut代表可以在横向、纵向任意一个方向上拉伸的空白组件(间距),RigidArea代表不可拉伸的空白组件(间距)

Box提供了5个静态方法来创建Glue、Strut和RigidArea:

(1)createHorizontalGlue():创建一条水平Glue(可在两个方向上同时拉伸的间距)

(2)createVerticalGlue():创建一条垂直Glue(可在两个方向上同时拉伸的间距)

(3)createHorizontalStrut(int width):创建一条指定宽度的水平Strut(可在垂直方向上同时拉伸的间距)

(4)createVerticalStrut(int height):创建一条指定高度的水平Strut(可在水平方向上同时拉伸的间距)

(5)createRigidArea(Dimension d):创建指定宽度、高度的RigidArea(不可拉伸的间距)

上面5个方法都返回Component对象(代表间距),程序可以将这些分隔Component添加到两个普通的GUI组件之间,用以控制组件的间距。

下面程序使用上面3种间距来分隔Box中的按钮:

package codes11;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;

import javax.swing.Box;

public class BoxSpaceTest {

	private Frame f = new Frame("测试");
	// 定义水平摆放组件的Box对象
	private Box horizontal = Box.createHorizontalBox();
	// 定义水平摆放组件的Box对象
	private Box vertical = Box.createVerticalBox();

	public void init() {
		horizontal.add(new Button("水平按钮一"));
		horizontal.add(Box.createHorizontalGlue());
		horizontal.add(new Button("水平按钮二"));
		// 水平方向不可拉伸的间距,其宽度为10px
		horizontal.add(Box.createHorizontalStrut(10));
		horizontal.add(new Button("水平按钮三"));
		vertical.add(new Button("垂直按钮一"));
		vertical.add(Box.createVerticalGlue());
		vertical.add(new Button("垂直按钮二"));
		// 垂直方向不可拉伸的间距,其高度为10px
		vertical.add(Box.createVerticalStrut(10));
		vertical.add(new Button("垂直按钮三"));
		f.add(horizontal, BorderLayout.NORTH);
		f.add(vertical);
		f.pack();
		f.setVisible(true);
	}

	public static void main(String[] args) {
		new BoxSpaceTest().init();
	}

}
运行程序,结果如下图:



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值