java常用布局管理器(流布局管理器、边界布局管理器、网格布局管理器)

在Swing中,每个组件在容器中都有一个具体的位置大小、而在容器中摆放各种组件时很难判断其具体位置和大小,使用布局管理器比程序员直接在容器中控制Swing组件的位置和大小方便得多,可以更加有效地处理整个窗体的布局。Swing提供的常用布局管理器有FlowLayout流布局管理器BorderLayout边界布局管理器GridLayout网格布局管理器,这些布局管理器位于java.awt包中。下面将对常用的布局管理器进行讲解。

FlowLayout流布局管理器

流布局管理器是最基本的布局管理器,在整个容器中的布局正如其名,像流一样从左到右摆放组件,直到占据了这一行的所有空间,然后在向下移动一行,默认情况下,组件在每一行都是居中排列的,但是通过设置也可以更改组件在每一行上的排列位置。FlowLayout类中有以下常用的构造方法:

  • public FlowLayout()
  • public FlowLayout(int alignment)
  • public FlowLayout(int alignment,int horizGap,int vertGap)

构造方法中的alignment参数表示使用流布局管理器后组件在每一行的具体摆放位置,它可以被赋予FlowLayout.LEFT、FlowLayout.CENTER和FlowLayout.RIGHT这三个值中的任意一个,它们的详细说明见下表:

alignment参数说明
FlowLayout.LEFT在每一个行的组件将被指定为按照左对齐排列
FlowLayout.CENTER在每一行的组件将被指定为按照居中对齐排列
FlowLayout.RIGHT在每一行的组件将被指定为按照右对齐排列

public FlowLayout(int alignment,int horizGap,int vertGap)构造方法中还存在horizGap与vertGap两个参数,这两个参数分别以像素为单位指定组件之间的水平间隔与垂直间隔

下面是一个使用流布局管理器的实例,代码如下:


import java.awt.Container;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.WindowConstants;

public class Demo extends JFrame {
	public Demo() {
		setTitle("本窗体使用流布局管理器"); // 设置窗体标题
		Container c = getContentPane();
		// 设置窗体使用流布局管理器,使组件右对齐,组件之间的水平间隔为10像素,垂直间隔10像素
		setLayout(new FlowLayout(FlowLayout.RIGHT, 10, 10));
		for (int i = 0; i < 10; i++) { // 在容器中循环添加10个按钮
			c.add(new JButton("button" + i));
		}
		setSize(300, 200); // 设置窗体大小
		// 设置窗体关闭方式
		setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
		setVisible(true); // 设置窗体可见
	}

	public static void main(String[] args) {
		new Demo();
	}
}

返回结果:

                                     

从本实例可以看出,如果改变整个窗口大小,其中组件的摆放位置也会相应地发生变化,正好验证了使用流布局管理器时组件从左到右摆放的效果当组件填满一行后将自动换行直到所有的组件都摆放到容器为止,默认效果图是左边,手动改变窗体大小,如右图。                       

BorderLayout边界布局管理器

创建完窗体后,在默认不指定窗体布局的情况下,Swing组件的布局模式是边界布局,边界布局管理器可以将容器划分为东、南、西、北、中5个区域,如下图:

设计窗体时,可以将组件加入到边界布局管理器的5个区域中,另外,在调用Container类的add()方法向容器中添加组件时,可以设置此组件在边界布局管理器中的区域,区域的控制可以由BorderLayout类中的成员变量来决定,这些成员变量的具体含义如下表:

成员变量含义
BorderLayout.NORTH在容器中添加组建时,组件置于北部
BorderLayout.SOUTH在容器中添加组建时,组件置于南部
BorderLayout.EAST在容器中添加组建时,组件置于东部
BorderLayout.WEST在容器中添加组建时,组件置于西部
BorderLayout.CENTER在容器中添加组建时,组件置于中间区域开始填充,直到与其他组件边界连接

注意:如果使用了边界布局管理器,在向容器中添加组件时,如果不指定添加到那个区域,则默认添加到CENTER区域,如果向一个区域中添加多个组件,后放入的组件会覆盖先放入的组件。

下面是一个使用边界布局管理器的实例,代码如下:


import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.WindowConstants;

public class Demo extends JFrame {
	public Demo() {
		setTitle("这个窗体使用边界布局管理器");
		Container c = getContentPane(); // 定义一个容器
		setLayout(new BorderLayout()); // 设置容器为边界布局管理器
		JButton centerBtn = new JButton("中"), 
			northBtn = new JButton("北"), 
			southBtn = new JButton("南"),
			westBtn = new JButton("西"), 
			eastBtn = new JButton("东");
		c.add(centerBtn, BorderLayout.CENTER);// 中部添加按钮
		c.add(northBtn, BorderLayout.NORTH);// 北部添加按钮
		c.add(southBtn, BorderLayout.SOUTH);// 南部添加按钮
		c.add(westBtn, BorderLayout.WEST);// 西部添加按钮
		c.add(eastBtn, BorderLayout.EAST);// 东部添加按钮
		setSize(350, 200); // 设置窗体大小
		setVisible(true); // 设置窗体可见
		// 设置窗体关闭方式
		setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
	}
	public static void main(String[] args) {
		new Demo();
	}
}

返回结果:
 

GridLayout网格布局管理器

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

网格布局管理器主要有以下两个常用的构造方法:

  • public GridLayout(int rows,int columns)
  • public GridLayout(int rows,int columns,int horizGap,int vertGap)

在上述构造方法中,rowscolumns参数代表网格的行数与列数,这两个参数只有一个参数可以为0,代表一行或一列可以排列任意多个组件,参数horizGap与vertGap指定网格之间的间距,其中horizGap参数指定网格之间的水平间距vertGap参数指定网格之间的垂直间距

下面来看一个在应该程序中使用网格布局管理器的实例,代码如下:


import java.awt.Container;
import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.WindowConstants;

public class Demo extends JFrame {
	public Demo() {
		Container c = getContentPane();
		/*
		 * 设置容器使用网格布局管理器,设置7行3列的网格。
		 * 组件间水平间距为5像素,垂直间距为5像素
		 */
		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 Demo();
	}
}

返回结果:

从上面实例可以看出,尝试改变窗体大小,将发现其中的组件大小也会发生相应的改变。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值