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:设置组件边距。

目录
相关文章
|
5月前
|
安全 前端开发 Java
《深入理解Spring》:现代Java开发的核心框架
Spring自2003年诞生以来,已成为Java企业级开发的基石,凭借IoC、AOP、声明式编程等核心特性,极大简化了开发复杂度。本系列将深入解析Spring框架核心原理及Spring Boot、Cloud、Security等生态组件,助力开发者构建高效、可扩展的应用体系。(238字)
|
5月前
|
Java 虚拟化 容器
(Java)Java里JFrame窗体的基本操作(容器布局篇-1)
容器 容器,我的理解是可以包容其他东西的玩意。它可以是一个盒子,可以是一个虚拟化的物品,可只要能包裹住其他存在质体的东西,那么都可以称作是容器。例如:JPanel组件和JScollPane组件两者都是容器也是组件。 既然有容器,那么容器中的布局就必不可少了。不然不规矩的摆放物品,人类看不习惯,我也看不习惯 ???? 本篇内容,将说明java JFrame窗体里容器中几类布局。 说明:所有在JFrame窗体里的容器布局都会使用setLayout()方法,采用的布局参数都将放进这个方法里 绝对布局 调用窗体容器
172 1
|
6月前
|
消息中间件 人工智能 Java
抖音微信爆款小游戏大全:免费休闲/竞技/益智/PHP+Java全筏开源开发
本文基于2025年最新行业数据,深入解析抖音/微信爆款小游戏的开发逻辑,重点讲解PHP+Java双引擎架构实战,涵盖技术选型、架构设计、性能优化与开源生态,提供完整开源工具链,助力开发者从理论到落地打造高留存、高并发的小游戏产品。
|
6月前
|
存储 Java 关系型数据库
Java 项目实战基于面向对象思想的汽车租赁系统开发实例 汽车租赁系统 Java 面向对象项目实战
本文介绍基于Java面向对象编程的汽车租赁系统技术方案与应用实例,涵盖系统功能需求分析、类设计、数据库设计及具体代码实现,帮助开发者掌握Java在实际项目中的应用。
258 0
|
7月前
|
安全 Java 数据库
Java 项目实战病人挂号系统网站设计开发步骤及核心功能实现指南
本文介绍了基于Java的病人挂号系统网站的技术方案与应用实例,涵盖SSM与Spring Boot框架选型、数据库设计、功能模块划分及安全机制实现。系统支持患者在线注册、登录、挂号与预约,管理员可进行医院信息与排班管理。通过实际案例展示系统开发流程与核心代码实现,为Java Web医疗项目开发提供参考。
367 2
|
7月前
|
JavaScript 安全 前端开发
Java开发:最新技术驱动的病人挂号系统实操指南与全流程操作技巧汇总
本文介绍基于Spring Boot 3.x、Vue 3等最新技术构建现代化病人挂号系统,涵盖技术选型、核心功能实现与部署方案,助力开发者快速搭建高效、安全的医疗挂号平台。
361 3
|
7月前
|
移动开发 Cloud Native 安全
Java:跨平台之魂,企业级开发的磐石
Java:跨平台之魂,企业级开发的磐石
|
7月前
|
安全 Oracle Java
JAVA高级开发必备·卓伊凡详细JDK、JRE、JVM与Java生态深度解析-形象比喻系统理解-优雅草卓伊凡
JAVA高级开发必备·卓伊凡详细JDK、JRE、JVM与Java生态深度解析-形象比喻系统理解-优雅草卓伊凡
544 0
JAVA高级开发必备·卓伊凡详细JDK、JRE、JVM与Java生态深度解析-形象比喻系统理解-优雅草卓伊凡
|
8月前
|
并行计算 Java API
Java List 集合结合 Java 17 新特性与现代开发实践的深度解析及实战指南 Java List 集合
本文深入解析Java 17中List集合的现代用法,结合函数式编程、Stream API、密封类、模式匹配等新特性,通过实操案例讲解数据处理、并行计算、响应式编程等场景下的高级应用,帮助开发者提升集合操作效率与代码质量。
367 1