Java GUI编程(13)---网格袋布局GridBagLayout

GridBagLayout(),网格袋布局,维持一个动态的矩形单元网格,矩形单元格被称为显示区域

组件可占用一个或多个的矩形单元格,组件不要求相同尺寸。

组件由GridBagLayou管理,关联一个约束GridBagConstraints类。

约束组件属性,比如:位置,大小,外部填充,内部填充等。

GridBagConstraints Class

约束属性与值

int gridx,gridy;

组件显示区域开始显示的位置(单元格坐标)坐标为(0,0);默认为RELATIVE,定位哪个指定的网格。

int  gridwidth,gridheight;

组件X向,Y向所占单元格的个数,默认值为1, 0为组件是该行的最后一个。

int weightx, weighty;

组件在X向和Y向上如何按比例伸缩. 0不拉伸,1随着窗口增大进行拉伸.

int fill;

窗口伸缩时组件如何跟着自动伸缩;

NONE: (默认)不调整组件大小;

HORIZONTAL: 加宽组件,使它在水平方向上填满其显示区域,但是不改变高度;

VERTICAL: 加高组件,使它在垂直方向上填满其显示区域,但是不改变宽度;

BOTH: 使组件完全填满其显示区域。

布局设计

演示代码


package com.msh.util;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.WindowConstants;

public class DemoGridBagLayout {
    
    public static void main(String[] args) {
        JFrame jf = new JFrame();
        jf.setTitle("演示网格袋布局");
        JPanel jp = new JPanel();
        JButton btn01 = new JButton("New");
        JButton btn02 = new JButton("Save");
        JButton btn03 = new JButton("Save As");
        
        String[] str = { "java", "C#", "HTML5" };
        JComboBox jcb = new JComboBox(str);
        JTextField jtxf = new JTextField("please input...");
        JButton btn04 = new JButton("Clear...");
        JList jls = new JList(str);
        JTextArea jtxArea = new JTextArea();
        jtxArea.setBackground(Color.lightGray);
        
        GridBagLayout layout = new GridBagLayout();
        jf.setLayout(layout);
        
        jf.add(btn01); //加载组件
        jf.add(btn02);
        jf.add(btn03);
        jf.add(jp);
        jf.add(jcb);
        jf.add(jtxf);
        jf.add(btn04);
        jf.add(jls);
        jf.add(jtxArea);
        
        //定义一个约束GridBagConstraints,布局每个组件的显示位置
        GridBagConstraints s= new GridBagConstraints();
        s.fill = GridBagConstraints.BOTH;  //组件所在的区域比组件本身要大时,使组件完全填满其显示区域
        
        //布局第一行:三个按钮,从左到右排列,
        s.gridwidth=1; //设置组件水平所占用的格子数,0为组件是该行的最后一个
        s.weightx = 0; //设置组件水平的拉伸幅度,0不拉伸,1随着窗口增大进行拉伸
        s.weighty=0; //设置组件垂直的拉伸幅度,0不拉伸,1随着窗口增大进行拉伸
        layout.setConstraints(btn01, s);
        layout.setConstraints(btn02, s);
        layout.setConstraints(btn03, s);
        
        //布局第一行:改行最后空余位置,用面板填充
        s.gridwidth=0; 
        s.weightx = 0; 
        s.weighty=0;
        layout.setConstraints(jp, s);
        
        //布局第二行:第一个显示位置是下拉组合框,占用两单元格,水平不拉伸,垂直不拉伸
        s.gridwidth=2; 
        s.weightx = 0; 
        s.weighty=0;
        layout.setConstraints(jcb, s);
        
        //布局第二行:改行的第二个位置显示文本字段的
        s.gridwidth=4;
        s.weightx = 1;
        s.weighty=0;
        layout.setConstraints(jtxf, s);
        
        //把"清空"按钮,布局在改行最后一个位置
        s.gridwidth=0;
        s.weightx = 0;
        s.weighty=0;
        layout.setConstraints(btn04, s);
        
        //布局第三行:第一个位置:显示列表框,
        s.gridwidth=2; //水平所占用的格子数2
        s.weightx = 0;
        s.weighty=1;  //垂直的拉伸
        layout.setConstraints(jls, s);
        
        s.gridwidth=5; //水平所占用的格子数5
        s.weightx = 0;
        s.weighty=1;  //垂直的拉伸
        layout.setConstraints(jtxArea, s);
        
        jf.setSize(600, 600);
        jf.setLocation(300, 200);
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        jf.setVisible(true);
    }
    
}

运行程式

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值