软件构造java图形用户界面--布局管理器

软件构造 常见的布局管理器

  在使用Swing向容器中添加组件时,需要考虑组件在容器中的位置和大小,如果不使用布局管理器,就需要提前构思好组件的位置和大小。
而为了加快开发效率,java提供了一些布局管理器,负责提供Swing组件安排、展示在容器中的方法以及基本的布局功能。

1 绝对布局(不使用布局管理器)

绝对布局就是不使用布局管理器的情况,需要硬性指定组件的位置和大小,优点是可以使用绝对坐标的方式指定组件的位置。
使用步骤:
(1)Container.setLayout(null)表示不使用组件管理器
(2) Container.setBounds()指定组件位置大小

2 流布局管理器(FlowLayout)

  在容器中布局时,像“流”一样从左到右布满所在行,然后在向下移动一行。默认情况,组件居中,但也可以设置。

构造方法

(1) public FlowLayout()
(2) public FlowLayout(int alignment);
(3) public FlowLayout(int alignment,int horizGap,int vertGap)
注:
alignment参数:对齐方式(FlowLayout.LEFT = 0表示左对齐;FlowLayout.CENTER = 1表示居中;FlowLayout.RIGHT = 2表示右对齐)
horizGap与vertGap:指定组件间的水平和垂直间隔。
具体使用:

setLayout(new FlowLayout(2, 10, 10));

2 边界布局管理器BorderLayout

该布局管理器为Swing组件在不指定下的默认管理器。
该布局管理器将容器划分为东西南北中5个区域,添加组件时(add)可以指定添加到那个区域。不指定默认为BorderLayout.CENTER,其余还有下面四个:
在这里插入图片描述设置五个按钮依次添加到五个区域,运行如下:
在这里插入图片描述

3 网格布局管理器(GridLayout)

网格布局管理器将容器划分为网格,所以组件可以按行和列进行排列。在网格布局管理器中,每一个组件的大小都相同,并且网格中的空格的个数由网格的行数和列数决定,例如一个两行两列的网格能产生4个大小相等的网格。组件从网格的左上角开始,按照从左到右、从上到下的顺序加入到网格中,而且每一个组件都会填满整个网格,改变窗体的大小,组件也会随之而改变大小。

构造方法

(1)public GridLayout(int rows,int columns)
(2)public GridLayout(int rows,int columns,int horizGap,int vertGap)
注:rows,columns为网格的行数和列数;horizGap与vertGap分别为网格间的水平距离和垂直距离。
下面为一个例子:

package test;

import java.awt.*;
import javax.swing.*;

public class GridLayoutP extends JFrame {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public GridLayoutPosition() {
		Container c = getContentPane();
		// 设置容器使用网格布局管理器,设置7行3列的网格
		setLayout(new GridLayout(7, 3, 5, 5));
		for (int i = 0; i < 20; i++) {
			c.add(new JButton("button" + i)); // 循环添加按钮
		}
		setSize(300, 300);
		setTitle("这是一个使用网格布局管理器的窗体");
		setVisible(true);
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	}
	
	public static void main(String[] args) {
		new GridLayoutPosition();
	}
}

运行结果为:
在这里插入图片描述

4 网格组布局管理器(GridBagLayout)

个人认为这个是比较复杂,但功能也很强大的布局管理器。
由GridBagLayout类实现的布局管理器称为网格组布局管理器,它实现了一个动态的矩形网格,这个矩形网格由无数个矩形单元格组成,每个组件可以占用一个或多个这样的单元格。所谓动态的矩形网格,就是可以根据实际需要随意增减矩形网格的行数和列数。
在向由GridBagLayout类管理的容器中添加组件时,需要为每个组件创建一个与之关联的GridBagConstraints类的对象,通过该类中的属性可以设置组件的布局信息,例如组件在网格组中位于第几行、第几列,以及需要占用几行几列等。
通过GridBagLayout类实现的矩形网格的绘制方向由容器决定,如果容器的方向是从左到右,则位于矩形网格左上角的单元格的列索引为0,此时组件左上角的点为起始点;如果容器的方向是从右到左,则位于矩形网格右上角的单元格的列索引为0,此时组件右上角的点为起始点。

gridx和gridy属性
这两个属性用来设置组件起始点所在单元格的索引值。需要注意的是,属性gridx设置的是X轴(即网格水平方向)的索引值,所以它表示的是组件起始点所在列的索引;属性gridy设置的是Y轴(即网格垂直方向)的索引值,所以它表示的是组件起始点所在行的索引,如下图所示。
在这里插入图片描述
gridwidth和gridheight属性
这两个属性用来设置组件占用网格组的行数和列数。属性gridwidth为组件占用网格组的列数,也可以理解为以单元格为单位组件的宽度;属性gridheight为组件占用网格组的行数,也可以理解为以单元格为单位组件的高度,如下图所示。
在这里插入图片描述
anchor属性
属性anchor用来设置组件在其所在显示区域的显示位置。通常将显示区域从方向上划分为9个方位,分别为北方(NORTH)、东北(NORTHEAST)、东方(EAST)、东南(SOUTHEAST)、南方(SOUTH)、西南(SOUTHWEST)、西方(WEST)、西北(NORTHWEST)和中心(CENTER),如下图所示:
在这里插入图片描述
fill属性
属性fill用来设置组件的填充方式。当单元格显示区域的面积大于组件面积时,或者一个组件占用多个单元格时,显示组件可能不必占用所有显示区域,在这种情况下可以通过fill属性设置组件的填充方式。
在这里插入图片描述
insets属性
属性insets用来设置组件四周与单元格边缘之间的最小距离。该属性的类型为Insets,Insets类仅有一个构造方法Insets(int top, int left, int bottom, int right),它的4个入口参数依次为组件上方、左侧、下方和右侧的最小距离,单位为像素,如下图所示,默认为没有距离。
在这里插入图片描述
ipadx和ipady属性
这两个属性用来修改组件的首选大小。属性ipadx用来修改组件的宽度,属性ipady用来修改组件的高度。如果为正数,则在首选大小的基础上增加指定的宽度和高度,如上图所示,如果为负数,则在首选大小的基础上减小指定的宽度和高度,如下图所示。
在这里插入图片描述
在这里插入图片描述
使用
下方为按钮E和按钮F的使用:

final JButton button_4 = new JButton("E");
		final GridBagConstraints gridBagConstraints_4 = new GridBagConstraints();
		gridBagConstraints_4.gridy = 1;
		gridBagConstraints_4.gridx = 0;
		gridBagConstraints_4.gridwidth = 2;// 组件占用两列
		// 设置组件上方的最小距离
		gridBagConstraints_4.insets = new Insets(5, 0, 0, 0);
		// 只调整组件的宽度
		gridBagConstraints_4.fill = GridBagConstraints.HORIZONTAL;
		getContentPane().add(button_4, gridBagConstraints_4);

		final JButton button_5 = new JButton("F");
		final GridBagConstraints gridBagConstraints_5 = new GridBagConstraints();
		gridBagConstraints_5.gridy = 2;// 起始点为第3行
		gridBagConstraints_5.gridx = 0;// 起始点为第1列
		gridBagConstraints_5.insets = new Insets(5, 0, 0, 0);
		gridBagConstraints_5.fill = GridBagConstraints.HORIZONTAL;
		getContentPane().add(button_5, gridBagConstraints_5);

运行结果为:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值