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;没有改变,所以第九和第十个按钮都是当前行的最后一个按钮
    }
}

结果如下

GUI之GridBagLayout网络包布局管理器

可能有的电脑输出的是乱码,处理方式如下:

点开run Configurations,将common设置为GBK。到这一步执行就没问题了。

(如果还不行,再点Arguments的VM arguments填入-Dfile.encoding=gbk。点击Apply,再点击run,这样就可以使图片和控制台都正常显示)

相关文章:

  • 2021-08-22
  • 2022-02-28
  • 2022-12-23
  • 2021-05-31
  • 2021-11-19
  • 2021-05-24
  • 2021-09-20
猜你喜欢
  • 2022-12-23
  • 2021-10-20
  • 2021-04-17
  • 2021-04-12
  • 2022-12-23
  • 2021-04-16
  • 2021-12-10
相关资源
相似解决方案