Java开发GUI之GridBagLayout布局

简介: Java开发GUI之GridBagLayout布局

GridBagLayout布局管理器是比GridLayout布局更加强大的表格布局。GridLayout进行的表格布局其中元素尺寸相同,而GridBagLayout则可以灵活配置其中元素的尺寸和位置。同样,GridBagLayout的使用也更加复杂,其布局依赖GridBagConstraints类。


   先看如下经典示例:


static void GridBagLayoutTest(){

 Frame frame = new Frame("GridBag");

 GridBagLayout layout = new GridBagLayout();

 GridBagConstraints constraints = new GridBagConstraints();

 Panel pannel = new Panel(layout);

 constraints.fill = GridBagConstraints.BOTH;

 constraints.weightx = 1.0;

 Button button1 = new Button("Button1");

 layout.setConstraints(button1, constraints);

 pannel.add(button1);

 Button button2 = new Button("Button2");

 layout.setConstraints(button2, constraints);

 pannel.add(button2);

 Button button3 = new Button("Button3");

 layout.setConstraints(button3, constraints);

 pannel.add(button3);

 constraints.gridwidth = GridBagConstraints.REMAINDER;

 Button button4 = new Button("Button4");

 layout.setConstraints(button4, constraints);

 pannel.add(button4);

 constraints.weightx=0;

 Button button5 = new Button("Button5");

 layout.setConstraints(button5, constraints);

 pannel.add(button5);

 constraints.gridwidth = GridBagConstraints.RELATIVE;

 Button button6 = new Button("Button6");

 layout.setConstraints(button6, constraints);

 pannel.add(button6);

 constraints.gridwidth = GridBagConstraints.REMAINDER;

 Button button7 = new Button("Button7");

 layout.setConstraints(button7, constraints);

 pannel.add(button7);

 constraints.gridwidth=1;

 constraints.gridheight=2;

 constraints.weighty=1.0;

 Button button8 = new Button("Button8");

 layout.setConstraints(button8, constraints);

 pannel.add(button8);

 constraints.weighty=0;

 constraints.gridwidth=GridBagConstraints.REMAINDER;

 constraints.gridheight = 1;

 Button button9 = new Button("Button9");

 layout.setConstraints(button9, constraints);

 pannel.add(button9);

 Button button10 = new Button("Button10");

 layout.setConstraints(button10, constraints);

 pannel.add(button10);

 frame.add(pannel);

 frame.pack();

 frame.show();

}

上面代码布局了10个按钮,其中复用了同一个GridBagConstraints对象,效果如下:

image.png



GridBagLayout类中常用方法列举如下:


//构造方法

public GridBagLayout ();

//设置组件的布局

public void setConstraints(Component comp, GridBagConstraints constraints);

//获取某个组件的布局对象

public GridBagConstraints getConstraints(Component comp);

//获取布局原点

public Point getLayoutOrigin ();

在GridBagLayout中其着至关重要作用的类是GridBagConstraints布局类,其精确确定每个子组件的位置和尺寸信息。下面我们来一点点介绍这个类中属性的意义:


fill:这个属性确定当被布局组件尺寸小于其被指定的表格尺寸时,组件的拉伸模式,可选值定义在GridBagConstraints类中,如下:


//不进行尺寸处理 默认居中

public static final int NONE = 0;

//水平和竖直均拉伸到充满

public static final int BOTH = 1;

//水平方向拉伸充满

public static final int HORIZONTAL = 2;

//竖直方向拉伸充满

public static final int VERTICAL = 3;

anchor:这个属性确定当被布局组件尺寸小于其被指定的表格尺寸时,组件的布局位置,可选值如下:


//居中

public static final int CENTER = 10;

//布局在上方

public static final int NORTH = 11;

//布局在右上方

public static final int NORTHEAST = 12;

//布局在右方

public static final int EAST = 13;

//布局在右下方

public static final int SOUTHEAST = 14;

//布局在下方

public static final int SOUTH = 15;

//布局在左下方

public static final int SOUTHWEST = 16;

//布局在左方

public static final int WEST = 17;

//布局在左上方

public static final int NORTHWEST = 18;

gridwidth与gridheight:这两个属性分别设置组件的宽度与高度,他们可以设置为固定的数值,也可以设置为下面几个特殊的值来表示特殊的意义:


//占据其他组件布局后余下的尺寸

public static final int RELATIVE = -1;

//暂居此行或者此列的剩下全部,后置的组件另起一行或一列

public static final int REMAINDER = 0;

gridx与gridy:这两个值设置组件布局左上角所在的单元格,单位为单元格,默认会排列在上一个单元格之后。


weightx与weighty:这两个值设置组件布局的水平权重和竖直权重。


insets:设置组件边距。

目录
打赏
0
0
0
0
47
分享
相关文章
智慧工地源码,Java语言开发,微服务架构,支持分布式和集群部署,多端覆盖
智慧工地是“互联网+建筑工地”的创新模式,基于物联网、移动互联网、BIM、大数据、人工智能等技术,实现对施工现场人员、设备、材料、安全等环节的智能化管理。其解决方案涵盖数据大屏、移动APP和PC管理端,采用高性能Java微服务架构,支持分布式与集群部署,结合Redis、消息队列等技术确保系统稳定高效。通过大数据驱动决策、物联网实时监测预警及AI智能视频监控,消除数据孤岛,提升项目可控性与安全性。智慧工地提供专家级远程管理服务,助力施工质量和安全管理升级,同时依托可扩展平台、多端应用和丰富设备接口,满足多样化需求,推动建筑行业数字化转型。
41 5
JAVA接入DeepSeek大模型接口开发---阿里云的百炼模型
随着大模型的越来越盛行,现在很多企业开始接入大模型的接口,今天我从java开发角度来写一个demo的示例,用于接入DeepSeek大模型,国内的大模型有很多的接入渠道,今天主要介绍下阿里云的百炼模型,因为这个模型是免费的,只要注册一个账户,就会免费送百万的token进行学习,今天就从一个简单的可以执行的示例开始进行介绍,希望可以分享给各位正在学习的同学们。
223 3
JAVA接入DeepSeek大模型接口开发---阿里云的百炼模型
没有好的学历,Java开发未来的路应该怎么走?
在数字化时代,Java开发者即使没有高学历,也能通过拥抱新兴技术(如大模型应用与鸿蒙系统开发)、积累实战经验、持续学习新技能等途径实现职业突破。从参与开源项目到关注行业动态,再到规划技术专家或管理路线,建立人脉网络并利用教育平台提升能力,开发者可拓宽技术边界,适应日新月异的技术需求,在未来发展中占据一席之地。
一天成为Java开发高手:用飞算JavaAI实现十倍提效
“一天成为Java开发高手”曾被视为天方夜谭,但飞算JavaAI的出现改变了这一局面。这款AI开发助手通过智能引导、需求分析、自动化逻辑处理和完整代码工程生成,大幅简化了Java开发流程。它不仅帮助新手快速上手,还让资深开发者提高效率,减少调试时间。现在,参与“飞算JavaAI炫技赛”,展示你的开发实力,赢取丰厚奖品!
智慧产科一体化管理平台源码,基于Java,Vue,ElementUI技术开发,二开快捷
智慧产科一体化管理平台覆盖从备孕到产后42天的全流程管理,构建科室协同、医患沟通及智能设备互联平台。通过移动端扫码建卡、自助报道、智能采集数据等手段优化就诊流程,提升孕妇就诊体验,并实现高危孕产妇五色管理和孕妇学校三位一体化管理,全面提升妇幼健康宣教质量。
70 12
课时146:使用JDT开发Java程序
在 Eclipse 之中提供有 JDT环境可以实现java 程序的开发,下面就通过一些功能进行演示。 项目开发流程
SaaS云计算技术的智慧工地源码,基于Java+Spring Cloud框架开发
智慧工地源码基于微服务+Java+Spring Cloud +UniApp +MySql架构,利用传感器、监控摄像头、AI、大数据等技术,实现施工现场的实时监测、数据分析与智能决策。平台涵盖人员、车辆、视频监控、施工质量、设备、环境和能耗管理七大维度,提供可视化管理、智能化报警、移动智能办公及分布计算存储等功能,全面提升工地的安全性、效率和质量。
Java高级应用开发:基于AI的微服务架构优化与性能调优
在现代企业级应用开发中,微服务架构虽带来灵活性和可扩展性,但也增加了系统复杂性和性能瓶颈。本文探讨如何利用AI技术,特别是像DeepSeek这样的智能工具,优化Java微服务架构。AI通过智能分析系统运行数据,自动识别并解决性能瓶颈,优化服务拆分、通信方式及资源管理,实现高效性能调优,助力开发者设计更合理的微服务架构,迎接未来智能化开发的新时代。
菜鸟之路day02-04拼图小游戏开发一一JAVA基础综合项目
本项目基于黑马程序员教程,涵盖面向对象进阶、继承、多态等知识,历时约24小时完成。项目去除了登录和注册模块,专注于单机游戏体验。使用Git进行版本管理,代码托管于Gitee。项目包含窗体搭建、事件监听、图片加载与打乱、交互逻辑实现、菜单功能及美化界面等内容。通过此项目,巩固了Java基础并提升了实际开发能力。 仓库地址:[https://gitee.com/zhang-tenglan/puzzlegame.git](https://gitee.com/zhang-tenglan/puzzlegame.git)
92 6
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等