java:布局方法(网格布局)

一、简单说明

网格布局,用常说的几行几列来理解便可,按几行几列分成多个大小统一的组件(这里选“按钮”)。一个窗体,在里边布置“按钮”用网格布局,就是把窗体里的空间分成指定的几行几列,然后“按钮”按着这些几行几列的位置有序的进行排列。附图便简单明了,如下:

在这里插入图片描述

其实从图像中可以看出网格布局的排列方式和流布局的排列方式有些相同之处,都是从左往右按顺序排列。只是显示方式有些相同,当我们尝试把窗体放大后这些“按钮”的位置不变的,“按钮”只是随窗体一起变大罢了。如下图:

在这里插入图片描述

二、关键代码

c.setLayout(new GridLayout(A,B,C,D));

  • Layout(布局)
  • 在容器c里添加布局方法,布局方法选网格(Grid)布局,可以如此解读这句代码。
  • 参数A:行数
  • 参数B:列数
  • 参数C:水平间距(组件间)
  • 参数D:竖直间距(组件间)

三、流程图

创建一个窗体
窗体里添加容器
组件
网格布局
尺寸
坐标
是否可见
行数
列数
组件间的间距

四、例子说明

1. 有17个“按钮”排列

(1)源码A

这里的代码创建17个按钮,以网格布局的方法布置在创建的窗体中。程序输入的行数为5,列数为4,水平间距为10像素,竖直间距为8像素。源码A为默认情况。

  • 注意: 后边的源码B、源码C也只是在源码A的基础上修改参数,代码形式相同。
/**所想:
   网格布局
   Grid(网格)

*/

import java.awt.Container;// 容器
import java.awt.GridLayout;// 网格布局

import javax.swing.*;

class Demo extends JFrame{
	public Demo(){
		setBounds(90,80,480,320);// 窗体坐标、宽高
		setDefaultCloseOperation(EXIT_ON_CLOSE);// 窗体点击×程序停止运行

		Container c=getContentPane();// 添加容器
		// 在容器里添加网格布局
		c.setLayout(new GridLayout(5,4,10,8));// (行数,列数,水平间距,竖直间距);单位:像素

		// 创建17个按钮
		for(int i=1;i<18;i++){
			c.add(new JButton("按钮"+i));
		}

		setVisible(true);// 窗体是否可见
	}
	public static void main(String[] args){
		new Demo();
	}
(2)运行效果

在这里插入图片描述

2. 有36个“按钮”排列

我们都知道网格布局指定的几行几列,上边的代码为5行4列,按理也就是可选5×4=20个“按钮”进行排列。其实不一定要选20个“按钮”,可以选多个,比如36个、12个都可以的。而排列方式其实和列关系不大,主要还是取决于按钮数和行数。当我们创建36个“按钮”时,行数为5,则列数为7+1(36÷5=7—余1)。如果按钮数能整除比如35,列数7便不加1。36个“按钮”布置的方式为:在窗体里分5行8列,“按钮”从左往右、从上到下按顺序排列。

(1)源码B
  • 行数:这里代码设置为5
  • 列数:虽然列数代码里设置为4,但事实上不取决与代码里设置的列数,而是取决于按钮数和行数,按钮数÷行数=n—余数i 。如果按钮数不能整除,也就是余数i不为0时,列数为n+1 。能整除则列数为n。源码B的“按钮”数为36,则列数为7+1=8。
  • 注意: 实际为列数为8和代码设置的列数为4不相同,不过也不是说列数代码不需要输入数值,数值仍然需要输入,不然程序报错。
/**所想:
   网格布局
   Grid(网格)

*/

import java.awt.Container;// 容器
import java.awt.GridLayout;// 网格布局

import javax.swing.*;

class Demo extends JFrame{
	public Demo(){
		setBounds(90,80,480,320);// 窗体坐标、宽高
		setDefaultCloseOperation(EXIT_ON_CLOSE);// 窗体点击×程序停止运行

		Container c=getContentPane();// 添加容器
		// 在容器里添加网格布局
		c.setLayout(new GridLayout(5,4,10,8));// (行数,列数,水平间距,竖直间距);单位:像素

		// 创建36个按钮
		for(int i=1;i<37;i++){
			c.add(new JButton("按钮"+i));
		}

		setVisible(true);// 窗体是否可见
	}
	public static void main(String[] args){
		new Demo();
	}
}
(2)源码B运行效果

5行8列,如下图:
在这里插入图片描述

3. 有12个“按钮”排列

道理和源码B相同。行数固定为5,列数则为2+1。也可以看出列数为3,与程序设置的列数4不相同。

(1)源码C
/**所想:
   网格布局
   Grid(网格)

*/

import java.awt.Container;// 容器
import java.awt.GridLayout;// 网格布局

import javax.swing.*;

class Demo extends JFrame{
	public Demo(){
		setBounds(90,80,480,320);// 窗体坐标、宽高
		setDefaultCloseOperation(EXIT_ON_CLOSE);// 窗体点击×程序停止运行

		Container c=getContentPane();// 添加容器
		// 在容器里添加网格布局
		c.setLayout(new GridLayout(5,4,10,8));// (行数,列数,水平间距,竖直间距);单位:像素

		// 创建12个按钮
		for(int i=1;i<13;i++){
			c.add(new JButton("按钮"+i));
		}

		setVisible(true);// 窗体是否可见
	}
	public static void main(String[] args){
		new Demo();
	}
}
(2)源码C的运行效果

5行3列,如下图:
在这里插入图片描述

五、定位日期

2021.4.22;16:16

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值