目录
一、关键代码
(一)、网格组约束条件
(二)、约束的“条件”
1、坐标
2、尺寸
3、填充(fill)属性
二、网格组布局说明
(一)、源码A
1、源码A说明
2、源码A运行效果
(二)、源码B(源码A基础上添加方法way3、way4)
1、源码B说明
2、源码B的运行效果
(三)、源码C(源码B的基础上添加方法way4)
1、源码C说明
2、源码C的运行效果
(四)、源码C关于fill属性的运行效果
1-1、全填充(BOTH):
1-2、按钮3(名为:0.0)全填充(BOTH)的运行效果:
2-1、垂直填充(VERTICAL):
2-2、按钮3(名为:“0.0”)垂直填充(VERTICAL)的运行效果:
3-1、水平填充(HORIZONTAL):
3-2、按钮3(名为:“0.0”)水平填充(HORIZONTAL)的运行效果:
三、定位日期
一、关键代码
(一)、网格组约束条件
由下代码创建一个网格包约束条件g_0,最后再由g_0分别指定不同的条件,如位置、尺寸,等。
// Grid(网格),Bag(包),Constraints(限制) GridBagConstraints g_0=new GridBagConstraints();// 创建一个网格包约束条件g_0
(二)、约束的“条件”
以下为本文用到的网格包约束条件中的“条件”。
1、坐标
网格(grid)的x,y坐标(gridx、gridy)
坐标数值由0开始,并未由1开始。坐标的第0行,即为第一行。
g_0.gridx=0;// x坐标1行位置,计算机以0为第一个 g_0.gridy=0;// y坐标1列位置
2、尺寸
网格(grid)的宽度(width)、高度(height)
(尺寸数值非零开头,和坐标不同)
g_0.gridwidth=1;// 宽度 g_0.gridheight=2;// 高度
3、填充(fill)属性
(1)、默认方式为“居中(center)”
(2)、上下,左右全:BOTH 。小写:both
(3)、垂直:VERTICAL 。小写:vertical
(4)、水平:HORIZonTAL 。小写:horizontal
g_3.fill=GridBagConstraints.BOTH;// 按钮填充方式,全全填充 g_3.fill=GridBagConstraints.VERTICAL;// 填充方式,垂直填充 g_3.fill=GridBagConstraints.HORIZONTAL;// 填充方式,水平填充
二、网格组布局说明
网格组布局,可以更精确的布置窗体内各构建的位置。在一个窗体中使用网格组布局,布置“按钮”“标签”等构件时,可以先引入网格组布局包A,然后再根据自己的需求对A设置好相关的约束条件便可。“约束”内容,比如:坐标、尺寸、填充方式、方位、具体位置等。本文记录的约束内容为:坐标、尺寸和填充方式,其它约束条件下篇博文记录。
(一)、源码A
1、源码A说明
展示网格组布局中约束条件的效果,先建立一个“窗体”,代码部分看源码A的方法way1,窗体的属性详细内容看way1部分代码。
在“窗体”中添加3个“按钮”,具体为源码A中的方法way2部分代码,数据坐标分别为(0-0),(1-1),(2-2),(x-y坐标)。由于坐标数值由0开始,则前面的way2的三个坐标分别为(第一行-第一列),(第二行-第二列),(第三行-第三列)。
源码A如下
import java.awt.GridBagConstraints;// Constraints(限制)
import java.awt.GridBagLayout;//网格包
import java.awt.Container;// 容器
import java.awt.Color;// 颜色
import javax.swing.Jframe; // 窗体
import javax.swing.JButton;// 按钮
import javax.swing.JPanel;// java面板
class Demo{
Jframe f=new Jframe();// 设置主窗体
Container c;// 主容器
void way1(){
// Content(容器),Pane(镶嵌),layout(布局)
c=f.getContentPane();//容器c镶嵌于窗体中
c.setLayout(new GridBagLayout());// 容器c建立网格包布局
f.setSize(1000,800);// 设置窗体宽、高
// location(位置),Relative(相对于),括号里为某“组件”参数,为null时窗体在桌面居中显示
f.setLocationRelativeTo(null);// 窗体在桌面居中显示,null(空值)
// Default(默认),operation(操作),点击×程序便停止运行
f.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);
}
void way2(){
// Grid(网格),Bag(包),Constraints(限制)
GridBagConstraints g_0=new GridBagConstraints();// 创建一个网格包约束条件g_0
g_0.gridx=0;// x坐标1行位置,计算机以0为第一个
g_0.gridy=0;// y坐标1列位置
c.add(new JButton("按钮1"),g_0);// 在容器里创建一个“按钮1”,约束条件“g_0”
GridBagConstraints g_1=new GridBagConstraints();// 约束“g_1”
g_1.gridx=1;// x坐标2行位置
g_1.gridy=1;// y坐标2列位置
c.add(new JButton("按钮2"),g_1);// 容器里加“按钮2”,约束为“g_1”
GridBagConstraints g_2=new GridBagConstraints();//约束“g_2”
g_2.gridx=2;// x坐标3行位置
g_2.gridy=2;// y坐标3列位置
c.add(new JButton("按钮3"),g_2);// 容器里加“按钮3”,约束为“g_2”
}
public static void main(String[] args){
Demo d=new Demo();// 创建一个新类型d
d.way1();// 对d使用方法way1,创建一个窗体,包括布局参数等
d.way2();// 对d使用方法way2,容器里的按钮等
d.f.setVisible(true);// 类型d、窗体可见,为真
}
}
2、源码A运行效果
(二)、源码B(源码A基础上添加方法way3、way4)
1、源码B说明
为更直观显示效果,创建一个矩阵,源码B中的方法way3。由多个“按钮”组成的,类似与表格的9行、9列的矩阵,效果由后面源码B运行效果图片看出。
使用方法way4,显示坐标2-2、3-3、4-4、5-6。坐标(x-y)。具体效果由后面源码B的运行的含有“列”“行”的“按钮”显示。
import java.awt.GridBagConstraints;// Constraints(限制)
import java.awt.GridBagLayout;//网格包
import java.awt.Container;// 容器
import java.awt.Color;// 颜色
import javax.swing.Jframe; // 窗体
import javax.swing.JButton;// 按钮
import javax.swing.JPanel;// java面板
class Demo{
Jframe f=new Jframe();// 设置主窗体
Container c;// 主容器
void way1(){
// Content(容器),Pane(镶嵌),layout(布局)
c=f.getContentPane();//容器c镶嵌于窗体中
c.setLayout(new GridBagLayout());// 容器c建立网格包布局
f.setSize(1000,800);// 设置窗体宽、高
// location(位置),Relative(相对于),括号里为某“组件”参数,为null时窗体在桌面居中显示
f.setLocationRelativeTo(null);// 窗体在桌面居中显示,null(空值)
// Default(默认),operation(操作),点击×程序便停止运行
f.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);
}
void way2(){
// Grid(网格),Bag(包),Constraints(限制)
GridBagConstraints g_0=new GridBagConstraints();// 创建一个网格包约束条件g_0
g_0.gridx=0;// x坐标1行位置,计算机以0为第一个
g_0.gridy=0;// y坐标1列位置
c.add(new JButton("按钮1"),g_0);// 在容器里创建一个“按钮1”,约束条件“g_0”
GridBagConstraints g_1=new GridBagConstraints();// 约束“g_1”
g_1.gridx=1;// x坐标2行位置
g_1.gridy=1;// y坐标2列位置
c.add(new JButton("按钮2"),g_1);// 容器里加“按钮2”,约束为“g_1”
GridBagConstraints g_2=new GridBagConstraints();//约束“g_2”
g_2.gridx=2;// x坐标3行位置
g_2.gridy=2;// y坐标3列位置
c.add(new JButton("按钮3"),g_2);// 容器里加“按钮3”,约束为“g_2”
}
void way4(){
GridBagConstraints g_1=new GridBagConstraints();// 创建一个网格包约束条件g_1
g_1.gridx=1;// x坐标第2行,0开始
g_1.gridy=1;// y坐标第2列
c.add(new JButton("按钮1,坐标2-2"),g_1);// 容器c里添加“按钮1”,约束为“g_1”
GridBagConstraints g_2=new GridBagConstraints();// 创建一个网格包约束条件g_2
g_2.gridx=2;// x坐标第3行,0开始
g_2.gridy=2;// y坐标第3列
c.add(new JButton("按钮2,坐标3-3"),g_2);// 容器c里添加“按钮2”,约束为“g_2”
GridBagConstraints g_3=new GridBagConstraints();// 创建一个网格包约束条件g_3
g_3.gridx=3;// x坐标第4行,0开始数
g_3.gridy=3;// y坐标第4列
c.add(new JButton("按钮3,坐标4-4"),g_3);// 容器c里添加“按钮3”,约束为“g_4”
GridBagConstraints g_4=new GridBagConstraints();// 创建一个网格包约束条件g_4
g_4.gridx=4;// x坐标5行,0开始数
g_4.gridy=5;// y坐标6列
c.add(new JButton("按钮4,坐标5-6"),g_4);// 容器c里添加“按钮4”,约束为“g_4”
}
void way3(){
for(int i_0=0;i_0<9;i_0++){
// Grid(网格),Bag(包),Constraints(限制)
GridBagConstraints g_0=new GridBagConstraints();// 创建一个网格包约束条件g_0
g_0.gridx=i_0;
g_0.gridy=0;// y轴第一列
c.add(new JButton(i_0+1+"行"),g_0);// 添加i+1个按钮,横向排序
}
for(int i_1=1;i_1<9;i_1++){
GridBagConstraints g_1=new GridBagConstraints();// 说明参考上
g_1.gridx=0;
g_1.gridy=i_1;// x轴第一列
c.add(new JButton(i_1+1+"列"),g_1);
}
}
public static void main(String[] args){
Demo d=new Demo();// 创建一个新类型d
d.way1();// 对d使用方法way1,创建一个窗体,包括布局参数等
//d.way2();// 对d使用方法way2,容器里的按钮等
d.way3();// 方法way3,按钮矩阵,参照用
d.way4();// 方法way4,坐标分别为2-2,3-3,4-4的“按钮”
d.f.setVisible(true);// 类型d、窗体可见,为真
}
}
2、源码B的运行效果
(三)、源码C(源码B的基础上添加方法way4)
1、源码C说明
源码C方法way4为三个“按钮”相对于方法way2多添加了构件的“尺寸”约束条件。具体可观察下方的源码C的运行效果。按钮1和按钮2的坐标、尺寸的约束数据作为按钮的名称。各使用矩形框(a、b、c、d、e、f)框选了按钮所对应的坐标及尺寸。
为更直观看到效果,单独对按钮3(名称:“0.0”)另外添加了一个红色的“标签”背景,以方便看出按钮3(名称:“0.0”)在后面fill属性约束条件下的表现效果。 对于按钮3名称选择为“0.0”,为更直观的显示,按钮的名称太长容易影响尺寸、坐标的判断。由源码C方法way4中的数据按钮3(名为:“0.0”)的坐标为4-4,尺寸为2-3。源码C中的按钮3(“0.0”)默认状态为上下左右居中。对于按钮3的fill属性(水平填充、垂直填充、上下左右填充)的相关代码已写于源码C方法way4中,暂处于注释状态,用于后面说明使用。
import java.awt.GridBagConstraints;// Constraints(限制)
import java.awt.GridBagLayout;//网格包
import java.awt.Container;// 容器
import java.awt.Color;// 颜色
import javax.swing.Jframe; // 窗体
import javax.swing.JButton;// 按钮
import javax.swing.JPanel;// java面板
class Demo{
Jframe f=new Jframe();// 设置主窗体
Container c;// 主容器
void way1(){
// Content(容器),Pane(镶嵌),layout(布局)
c=f.getContentPane();//容器c镶嵌于窗体中
c.setLayout(new GridBagLayout());// 容器c建立网格包布局
f.setSize(1000,800);// 设置窗体宽、高
// location(位置),Relative(相对于),括号里为某“组件”参数,为null时窗体在桌面居中显示
f.setLocationRelativeTo(null);// 窗体在桌面居中显示,null(空值)
// Default(默认),operation(操作),点击×程序便停止运行
f.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);
}
void way2(){
// Grid(网格),Bag(包),Constraints(限制)
GridBagConstraints g_0=new GridBagConstraints();// 创建一个网格包约束条件g_0
g_0.gridx=0;// x坐标1行位置,计算机以0为第一个
g_0.gridy=0;// y坐标1列位置
c.add(new JButton("按钮1"),g_0);// 在容器里创建一个“按钮1”,约束条件“g_0”
GridBagConstraints g_1=new GridBagConstraints();// 约束“g_1”
g_1.gridx=1;// x坐标2行位置
g_1.gridy=1;// y坐标2列位置
c.add(new JButton("按钮2"),g_1);// 容器里加“按钮2”,约束为“g_1”
GridBagConstraints g_2=new GridBagConstraints();//约束“g_2”
g_2.gridx=2;// x坐标3行位置
g_2.gridy=2;// y坐标3列位置
c.add(new JButton("按钮3"),g_2);// 容器里加“按钮3”,约束为“g_2”
}
void way4(){
GridBagConstraints g_1=new GridBagConstraints();// 创建一个网格包约束条件g_1
g_1.gridx=1;// x坐标第2行,0开始
g_1.gridy=1;// y坐标第2列
c.add(new JButton("按钮1,坐标2-2"),g_1);// 容器c里添加“按钮1”,约束为“g_1”
GridBagConstraints g_2=new GridBagConstraints();// 创建一个网格包约束条件g_2
g_2.gridx=2;// x坐标第3行,0开始
g_2.gridy=2;// y坐标第3列
c.add(new JButton("按钮2,坐标3-3"),g_2);// 容器c里添加“按钮2”,约束为“g_2”
GridBagConstraints g_3=new GridBagConstraints();// 创建一个网格包约束条件g_3
g_3.gridx=3;// x坐标第4行,0开始数
g_3.gridy=3;// y坐标第4列
c.add(new JButton("按钮3,坐标4-4"),g_3);// 容器c里添加“按钮3”,约束为“g_4”
GridBagConstraints g_4=new GridBagConstraints();// 创建一个网格包约束条件g_4
g_4.gridx=4;// x坐标5行,0开始数
g_4.gridy=5;// y坐标6列
c.add(new JButton("按钮4,坐标5-6"),g_4);// 容器c里添加“按钮4”,约束为“g_4”
}
void way3(){
for(int i_0=0;i_0<9;i_0++){
// Grid(网格),Bag(包),Constraints(限制)
GridBagConstraints g_0=new GridBagConstraints();// 创建一个网格包约束条件g_0
g_0.gridx=i_0;
g_0.gridy=0;// y轴第一列
c.add(new JButton(i_0+1+"行"),g_0);// 添加i+1个按钮,横向排序
}
for(int i_1=1;i_1<9;i_1++){
GridBagConstraints g_1=new GridBagConstraints();// 说明参考上
g_1.gridx=0;
g_1.gridy=i_1;// x轴第一列
c.add(new JButton(i_1+1+"列"),g_1);
}
}
void way5(){
GridBagConstraints g_1=new GridBagConstraints();// 创建一个网格包约束条件g_1
g_1.gridx=1;// x坐标
g_1.gridy=1;// y坐标
g_1.gridwidth=1;// 宽度
g_1.gridheight=2;// 高度
//g_1.fill=GridBagConstraints.BOTH;// 按钮填充方式,全全填充
c.add(new JButton("按钮1,坐标1-1,宽1高2"),g_1);// 添加按钮,约束对象g_1
GridBagConstraints g_2=new GridBagConstraints();// 创建一个网格包约束条件g_2
g_2.gridx=3;// x坐标
g_2.gridy=1;// y坐标
g_2.gridwidth=3;// 宽度
g_2.gridheight=1;// 高度
//g_2.fill=GridBagConstraints.BOTH;// 按钮填充方式,全全填充
c.add(new JButton("按钮2,坐标3-1,宽3高1"),g_2);// 容器c里添加按钮,约束为g_2
GridBagConstraints g_3=new GridBagConstraints();// 创建一个网格包约束条件g_3
g_3.gridx=4;// x坐标
g_3.gridy=4;// y坐标
g_3.gridwidth=2;// 宽度
g_3.gridheight=3;// 高度
//g_3.fill=GridBagConstraints.BOTH;// 按钮填充方式,全全填充
//g_3.fill=GridBagConstraints.VERTICAL;// 填充方式,垂直填充
//g_3.fill=GridBagConstraints.HORIZONTAL;// 填充方式,水平填充
c.add(new JButton("0.0"),g_3);// 容器c里添加按钮3,约束为g_3
g_3.fill=GridBagConstraints.BOTH;// 给g_3约束条件,全填充
JPanel p_1=new JPanel();// 新建面板(Panel),需要在前面添加import javax.swing.JPanel;
p_1.setBackground(Color.red);// 面板p_1的背景(颜色),需要在前面添加import java.awt.Color;
c.add(p_1,g_3);// 容器c里添加面板p_1,约束条件为g_3
}
public static void main(String[] args){
Demo d=new Demo();// 创建一个新类型d
d.way1();// 对d使用方法way1,创建一个窗体,包括布局参数等
//d.way2();// 对d使用方法way2,容器里的按钮等
d.way3();// 方法way3,按钮矩阵,参照用
//d.way4();// 方法way4,坐标分别为2-2,3-3,4-4的“按钮”
d.way5();// 对d使用方法way5,在方法way4的基础上添加了尺寸宽和高
d.f.setVisible(true);// 类型d、窗体可见,为真
}
}
2、源码C的运行效果
(四)、源码C关于fill属性的运行效果
1-1、全填充(BOTH):
将源码C的方法way4中显示按钮3(名称:“0.0”)的上下左右填充(全填充)效果。
关键词:BOTH
将源码C中方法way4中的的如下代码
//g_3.fill=GridBagConstraints.BOTH;// 按钮填充方式,全全填充
取消注释为如下
g_3.fill=GridBagConstraints.BOTH;// 按钮填充方式,全全填充
1-2、按钮3(名为:0.0)全填充(BOTH)的运行效果:
2-1、垂直填充(VERTICAL):
与上1-1同理,将源码C的方法way4中显示按钮3(名称:“0.0”)的垂直填充效果。
关键词:VERTICAL
将源码C中方法way4中的的如下代码
//g_3.fill=GridBagConstraints.VERTICAL;// 填充方式,垂直填充
取消注释为如下
g_3.fill=GridBagConstraints.VERTICAL;// 填充方式,垂直填充
2-2、按钮3(名为:“0.0”)垂直填充(VERTICAL)的运行效果:
3-1、水平填充(HORIZONTAL):
与上1-1同理,将源码C的方法way4中显示按钮3(名称:“0.0”)的水平填充效果。
关键词:HORIZONTAL
将源码C中方法way4中的的如下代码
//g_3.fill=GridBagConstraints.HORIZONTAL;// 填充方式,水平填充
取消注释为如下
g_3.fill=GridBagConstraints.HORIZONTAL;// 填充方式,水平填充
3-2、按钮3(名为:“0.0”)水平填充(HORIZONTAL)的运行效果:
三、定位日期
2022.3.8;23:16;因时间问题未编写完,第二天继续
2022.3.9;21:29



