关于GridBagLayout

使用Java开发GUI难免会用到布局管理器,特别是对于JPanel这样的中间容器来说,更是必不可少的。布局管理器也有好多种,其中GridBagLayout使用比较灵活多变。习惯了MFC中直接拖拽的形式开发GUI,在JAVA中虽然也有拖拽的形式生成的GUI,但是生成的GUI感觉怪怪的。

使用背景:在开发应用程序过程中,需要设计一个JPanel的面板,可以在面板的任意位置,添加任意大小的组建。

一、关于GridBagLayout的简介

GridBagConstraints的对象可设置的实例变量包括:
1. gridx, gridy :指定组件左上角的行与列,均从 0 开始计算。缺省 RELATIVE ,指定置于之前放入容器的组件的右边或下边。建议对每一组件都设置这两个值而不使用缺省值,
以得到更好的布局效果。
2. gridwidth, gridheight :指定组件显示区域占的列数与行数,缺省为 1 。REMAINDER指定组件占用最后余下的行或列;RELATIVE 指定组件成为其行或列的下一个。除非组件在最左列或已指定gridx和gridy值,否则不允许组件跨多行。
3. fill:当显示区域大于组件时决定是否以及如何改变组件大小。缺省值 NONE ;HORIZONTAL放宽组件以填充区域;VERTICAL 加高组件;BOTH 同时放大。
4. ipadx, ipady :指定内部填充(internal padding ),即组件最小尺寸上还要加多宽、多高,缺省为0 。组件宽度至少为最小宽度+ipadx*2 像素(左右皆补);同理,高度要加上 ipady*2像素。
5. insets:指定外部填充(external padding ),即组件与其显示区域边界之间的最小空间。设置为一个Insets 对象,缺省值为无填充。
6. anchor :当组件比显示区域小时确定放置方位:CENTER (缺省)、NORTH、EAST、SOUTH、WEST、NORTHEAST 、SOUTHEAST 、SOUTHWEST和NORTHWEST。
7. weightx, weighty :指定组件重量,用于决定行或列之间如何分配空间,影响resize行为。如果未指定至少一个重量值(缺省情况),所有组件挤在容器中间。通常设置在0.0
至1.0,值越大表明该组件所需空间越多。

二、使用实例

  1. JPanel controlPanel = new JPanel(); 
  2. controlPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.black,2), "操作区", TitledBorder.CENTER, TitledBorder.TOP)); 
  3. controlPanel.setPreferredSize(new Dimension(200,512)); 
  4.  
  5. GridBagLayout gridbag = new GridBagLayout(); 
  6. GridBagConstraints c = new GridBagConstraints(); 
  7. controlPanel.setLayout(gridbag); 
  8. c.fill = GridBagConstraints.HORIZONTAL; 
  9. JButton button; 
  10. button = new JButton("打开文件"); 
  11. c.ipady = 20;     // 增加该组件的高度  
  12. c.weightx = 0.5// 后面两个按钮没有改变weightx 的值,则使用这个值 
  13. c.gridx = 0
  14. c.gridy = 0;    // 占据第0 行0 列 
  15. c.insets = new Insets(0,0, 10,0); 
  16. gridbag.setConstraints(button, c); 
  17. controlPanel.add(button); 
  18.  
  19. button = new JButton("名字很长的第四个按钮"); 
  20. c.ipady = 20;     // 增加该组件的高度 
  21. c.gridx = 0
  22. c.gridy = 1;    // 第1 行0 列 
  23. c.gridwidth = 1;    // 但占据3 列的宽度  
  24. gridbag.setConstraints(button, c); 
  25. controlPanel.add(button); 
  26. button = new JButton("五"); 
  27. c.ipady = 20;     // 设置 ipady 为0,若不设置则为前面的40  
  28. c.weighty = 1.0;    // 使组件占据尽可能多的空间 
  29. c.anchor = GridBagConstraints.SOUTH; // 放置在空间的下方  
  30. // 使用 Inserts 填充,创建Inserts 对象是参数的顺序是top, left, bottom, right , 
  31. // 即按逆时针方向下面的创建的对象使用10个像素单元填充上部空间  
  32. c.insets = new Insets(0,0, 0,0); 
  33. c.gridx = 0
  34. c.gridy = 2;    // 占据第2 行第 1 列 
  35. //c.gridwidth = 3;    // 但占据2 列的宽度  
  36. gridbag.setConstraints(button, c); 
  37. controlPanel.add(button); 
  38.  
  39. return controlPanel; 
        JPanel controlPanel = new JPanel();
        controlPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.black, 2), "操作区", TitledBorder.CENTER, TitledBorder.TOP));
        controlPanel.setPreferredSize(new Dimension(200, 512));

        GridBagLayout gridbag = new GridBagLayout();
        GridBagConstraints c = new GridBagConstraints();
        controlPanel.setLayout(gridbag);
        c.fill = GridBagConstraints.HORIZONTAL;
        JButton button;
        button = new JButton("打开文件");
        c.ipady = 20;     // 增加该组件的高度 
        c.weightx = 0.5;  // 后面两个按钮没有改变weightx 的值,则使用这个值 
        c.gridx = 0;
        c.gridy = 0;    // 占据第0 行0 列 
        c.insets = new Insets(0, 0, 10, 0);
        gridbag.setConstraints(button, c);
        controlPanel.add(button);

        button = new JButton("名字很长的第四个按钮");
        c.ipady = 20;     // 增加该组件的高度 
        c.gridx = 0;
        c.gridy = 1;    // 第1 行0 列 
        c.gridwidth = 1;    // 但占据3 列的宽度 
        gridbag.setConstraints(button, c);
        controlPanel.add(button);
        button = new JButton("五");
        c.ipady = 20;     // 设置 ipady 为0,若不设置则为前面的40 
        c.weighty = 1.0;    // 使组件占据尽可能多的空间 
        c.anchor = GridBagConstraints.SOUTH; // 放置在空间的下方 
        // 使用 Inserts 填充,创建Inserts 对象是参数的顺序是top, left, bottom, right , 
        // 即按逆时针方向下面的创建的对象使用10个像素单元填充上部空间 
        c.insets = new Insets(0, 0, 0, 0);
        c.gridx = 0;
        c.gridy = 2;    // 占据第2 行第 1 列 
        //c.gridwidth = 3;    // 但占据2 列的宽度 
        gridbag.setConstraints(button, c);
        controlPanel.add(button);

        return controlPanel;

三、显示结果如下

四、代码说明

(1)c.fill = GridBagConstraints.HORIZONTAL;//让组建的宽度和Panel的宽度相同

(2)c.ipady = 20;     // 增加该组件的高度,设定特定的组建的高度

(3)c.weightx = 0.5;//这里是设置组建在一列中宽度所占的比例,同样可以设置组建在一行中高度所占的比例

(4)c.gridx = 0;//设置组建在Grid中的列号

(5)c.gridwidth = 3;    // 但占据3 列的宽度,该组建在某一行中的占据三列的宽度

(6)c.insets = new Insets(0, 0, 0, 0);// 使用 Inserts 填充,创建Inserts 对象是参数的顺序是top, left, bottom, right , 即按逆时针方向下面的创建的对象使用10个像素单元填充上部空间

(7)c.anchor = GridBagConstraints.SOUTH; // 放置在空间的下方

·

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值