package gui;
import java.awt.Button;
import java.awt.Frame;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
public class T05 {
/*GridBagLayout网络包布局管理器,它允许网格中的组件大小不同,而且允许一个组件跨越一个或者多个网格
* fill如果当组件的显示区域大于组件需要的大小,设置是否以及如何改变组件大小,该属性接受以下几个属性值,
* NONE:默认,不改变组件大小
* HORIZONTAL使组件水平方向足够长以填充显示区域,但是高度不变
* VERTICAL是组件垂直方向足够高以填充显示区域,但长度不变,
* BOTH使组件足够大,以填充整个显示区域*/
public static void main(String[] args) {
Frame f = new Frame("GridBagLayout");//设置名称为GridBagLayout的窗体
GridBagLayout layout = new GridBagLayout();
f.setLayout(layout);//设置布局管理器为网格包布局管理器
GridBagConstraints c = new GridBagConstraints();//创建GridBagConstraints对象(布局约束条件),并设置该对象相关属性
f.setSize(400,400);
f.setLocation(300,300);
f.setVisible(true);
c.fill=GridBagConstraints.BOTH;//设置组件横向纵向可以拉伸
// weightx指定分布额外的水平空间,.网格包布局管理器计算出的权重,如果得到的布局在水平方向上比需要填充的区域小,那么系统会将额外的空间按照其权重比例分布到每一列。权重为零的列不会得到额外的空间。
c.weightx=1;
c.weighty=1;
Button b1 = new Button("第一个按钮");
layout.setConstraints(b1, c);
f.add(b1);
Button b2 = new Button("第二个按钮");
layout.setConstraints(b2, c);
f.add(b2);
Button b3 = new Button("第三个按钮");
layout.setConstraints(b3, c);
f.add(b3);
// 添加的组件是本行即水平方向最后一个组件
c.gridwidth=GridBagConstraints.REMAINDER;
Button b4 = new Button("第四个按钮");
layout.setConstraints(b4, c);//调用GridBagLayout对象的setConstraints()方法建立GridBagConstraints对象和受控组件之间的联系
f.add(b4);
// 下面开始第二行了
c.weightx=0;//设置横向权重为0,即不占领多余的空间
c.weighty=0;//设置纵向权重为0,即不占领多余的空间
Button b5 = new Button("第五个按钮");
layout.setConstraints(b5, c);
f.add(b5);
c.gridwidth=1;//设置组件横向跨越一个网格,即和默认值相同
Button b6 = new Button("第六个按钮");
layout.setConstraints(b6, c);
f.add(b6);
// 添加的组件是本行即水平方向最后一个组件
c.gridwidth=GridBagConstraints.REMAINDER;
Button b7 = new Button("第七个按钮");
layout.setConstraints(b7, c);//调用GridBagLayout对象的setConstraints()方法建立GridBagConstraints对象和受控组件之间的联系
f.add(b7);
// 下面开始第三行了
c.gridheight=2;//设置组件纵向跨越两个网格
c.gridwidth=1;//设置组件横向跨越一个网格
c.weightx=2;//设置横向权重为2,
c.weighty=2;//设置纵向权重为2,
Button b8 = new Button("第八个按钮");
layout.setConstraints(b8, c);
f.add(b8);
// 添加的组件是本行即水平方向最后一个组件
c.gridwidth=GridBagConstraints.REMAINDER;
c.gridheight=1;//设置组件纵向跨越一个网格,即和默认值相同
Button b9 = new Button("第九个按钮");
layout.setConstraints(b9, c);
f.add(b9);
Button b10 = new Button("第十个按钮");
layout.setConstraints(b10, c);
f.add(b10);
// 由于c.gridwidth=GridBagConstraints.REMAINDER;没有改变,所以第九和第十个按钮都是当前行的最后一个按钮
}
}
结果如下
可能有的电脑输出的是乱码,处理方式如下:
点开run Configurations,将common设置为GBK。到这一步执行就没问题了。
(如果还不行,再点Arguments的VM arguments填入-Dfile.encoding=gbk。点击Apply,再点击run,这样就可以使图片和控制台都正常显示)