GridLayout布局管理器将容器分割成纵横分割的网格,每个网格所占的区域大小相同。当向使用GridLayout布局管理器的容器中添加组件时,默认从左向右、从上向下依次添加到每个网格中。与FlowLayout不同的是,放置在GridLayout布局管理器中的各组件的大小由组件所处的区域来决定(每个组件将自动占满整个区域)
GridLayout有以下两个构造器:
1. GridLayout(int rows, int cols):使用指定的行数、列数,以及默认的横向间距、纵向间距将容器分割成多个网格。
2. GridLayout(int rows, int cols, int hgap, int vgap):使用指定的行数、列数,以及指定的横向间距、纵向间距将容器分割成多个网格。
/**
* 以下程序结合BorderLayout和GridLayout开发了一个计算器的可视化窗口
* 程序的Frame采用默认的BorderLayout布局管理器,程序向BorderLayout中只添加了两个组件:
* NORTH区域添加了一个文本框,CENTER区域添加了一个Panel容器,该容器采用GridLayout布局管理器,Panel容器中添加了15个按钮。
*/
package codes11;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Panel;
import java.awt.TextField;
public class GridLayoutTest {
public static void main(String[] args) {
Frame f = new Frame("计算器");
Panel p1 = new Panel();
p1.add(new TextField(30));
f.add(p1, BorderLayout.NORTH);
Panel p2 = new Panel();
// 设置p2使用GridLayout布局管理器
p2.setLayout(new GridLayout(3, 5, 4, 4));
String[] name = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
"+", "-", "*", "/", "." };
// 向Panel中依次添加15个按钮
for (int i = 0; i < name.length; i++) {
p2.add(new Button(name[i]));
}
f.add(p2);
f.pack();
f.setVisible(true);
}
}
运行程序,结果如下图: