package GUI;
import java.awt.Button;
import java.awt.Frame;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
public class MyGridBagConstainer {
public static void main(String[] args)
{
Frame ff = new Frame();
GridBagLayout gr = new GridBagLayout();
GridBagConstraints gc = new GridBagConstraints(); //创建一个名为gc的约束对象
ff.setLayout(gr); //将容器ff的布局设为GridBagLayout
// 创建一组按钮组件
Button bb1 = new Button("bb1");
Button bb2 = new Button("bb2");
Button bb3 = new Button("bb3");
Button bb4 = new Button("bb4");
Button bb5 = new Button("bb5");
Button bb6 = new Button("bb6");
Button bb7 = new Button("bb7");
Button bb8 = new Button("bb8");
gc.fill = GridBagConstraints.BOTH;//设置约束的fill参数,该参数表示当组件的大小小于网格单元的大小时在水平和垂直 方向都填充,
gc.weightx =11; //设置x方向的加权值为11。
gc.weighty = 11;//设置y方向的加权值为11。
gr.setConstraints(bb1, gc); //将以上gc所设置的约束应用到按钮组件bb1
gc.weightx = 22;//设置x方向的加权值为22,如果不设置weightx则以下的组件都将自动应用上面所设置的weightx值11。
gr.setConstraints(bb2, gc); //将以上所设置的约束应用到按钮组件bb2。
// gc.weighty=111; //注意如果不注释掉该行,则以后使用gc约束的按钮组件在y方向的加权值将为111,而在前面设置的y方向 的加权值11将失去作用。
gc.weightx =33;
gc.gridwidth = GridBagConstraints.REMAINDER;//设置gridwidth参数的值为REMAINDER这样在后面使用该约束的组件将是该 行的最后一个组件。
gr.setConstraints(bb3, gc);
//第一行添加了三个按钮组件bb1,bb2,bb3,且这3个按钮的宽度按weightx设置的值11,22,33按 比例设置宽度
GridBagConstraints gc1 = new GridBagConstraints();//创建第二个约束gc1
gc1.fill = GridBagConstraints.BOTH;
gc1.weighty = 22; //将第2行的y方向加权值设为22
gr.setConstraints(bb4, gc1);
gr.setConstraints(bb5, gc1);
gc1.gridwidth = GridBagConstraints.REMAINDER;
gr.setConstraints(bb6, gc1);
//第二行添加了三个按钮组件bb4,bb5,bb6
gc1.weighty =33;
gc1.gridwidth = GridBagConstraints.REMAINDER;
gr.setConstraints(bb7, gc1);
//第三行添加了一个按钮组件bb7 gc1.weighty=0;
gr.setConstraints(bb8, gc1);
//第四行添加了一个按钮组件bb8,bb8并没有添加到bb7的后面,因为bb8使用了bb7前面的 gridwidth参数设置的值,所以bb8也是单独的一行。
ff.setSize(500, 300);
ff.add(bb1); ff.add(bb2);
ff.add(bb3);
ff.add(bb4);
ff.add(bb5);
ff.add(bb6);
ff.add(bb7);
ff.add(bb8);
ff.setVisible(true);
}
}
package GUI;
import java.awt.Button;
import java.awt.Frame;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
public class MyGridBagCon {
public static void main(String[] args) {//将容器ff的布局设为GridBagLayout
Frame ff = new Frame();
GridBagLayout gr = new GridBagLayout();
GridBagConstraints gc = new GridBagConstraints(); //创建一个名为gc的约束对象
ff.setLayout(gr);
//创建一组按钮组件
Button bb1 = new Button("bb1");
Button bb2 = new Button("bb2");
Button bb3 = new Button("bb3");
Button bb4 = new Button("bb4");
Button bb5 = new Button("bb5");
Button bb6 = new Button("bb6");
Button bb7 = new Button("bb7");
Button bb8 = new Button("bb8");
gc.fill = GridBagConstraints.BOTH;
gc.weightx = 11;
gc.weighty = 11;
gr.setConstraints(bb1, gc);
gc.weightx = 22;
gc.gridx = 1;
gc.gridy = 1; //将下一个组件放置在坐标为1,1的位置。
gr.setConstraints(bb2, gc);
gc.weightx = 33;
gc.gridx = 2;
gc.gridy = 1; //将下一个组件放置在坐标为2,1的位置。
gc.insets = new Insets(-10, -10, -10, -10); //将下一个组件与网格单元的空白区域向外扩展10个像素,在这里可以看到网格包布局允许组件之间重叠。
gc.gridwidth = GridBagConstraints.REMAINDER;
gr.setConstraints(bb3, gc);
GridBagConstraints gc1 = new GridBagConstraints();
gc1.weighty = 22;
gc1.ipadx = 50;
gc1.ipady = 50; //将组件的最小尺寸加大ipadx*2个像素。
gr.setConstraints(bb4, gc1);
gc1.ipadx = 0;
gc1.ipady = 0; //将以后的组件的最小尺寸设置为默认值,如果省掉该行,则以后组件的最小尺寸都会加大ipadx*2个像素。
gc1.anchor = GridBagConstraints.NORTHWEST; //将下一个组件bb5的位置放置在单元网格的西北方向。
gr.setConstraints(bb5, gc1); //因为bb5未设置fill,同时bb5设置了weightx(由gc参数设置)和weighty两个值以确定bb5所在 的网格单元的大小,因而组件bb5的原始最小尺寸无法占据整个网格单元。
gc1.fill = GridBagConstraints.BOTH;
gc1.gridwidth = GridBagConstraints.REMAINDER;
gr.setConstraints(bb6, gc1);
gc1.weighty = 33;
gc1.insets = new Insets(5, 15,40,150); //使下一个组件bb7与网格单元之间在上,左,下,右,分别保持5,15,40,150个像素的空白位置。
gr.setConstraints(bb7, gc1);
gc1.weighty = 0;
gc1.insets = new Insets(0, 0, 0, 0); //将insets的参数值设为默认值。
gr.setConstraints(bb8, gc1);
ff.setSize(500, 300);
ff.add(bb1);
ff.add(bb2);
ff.add(bb3);
ff.add(bb4);
ff.add(bb5);
ff.add(bb6);
ff.add(bb7);
ff.add(bb8);
ff.setVisible(true);}
}