Java——GUI(图形用户界面)

article/2025/11/1 6:32:26

学习目标:

1、掌握布局管理器、AWT事件处理机制以及常用事件

2、熟悉Swing组件的使用

3、了解GUI开发的相关原理和技巧

GUI全称是GraphicalUser Interface,即图形用户界面。顾名思义,就是应用程序提供给用户操作的图形界面,包括窗口、菜单、按钮、工具栏和其他各种图形界面元素。目前,图形用户界面已经成为一种趋势,几乎所有的程序设计语言都提供了GUI设计功能。Java中针对GUI设计提供了丰富的类库,这些类分别位于java.awt和javaxswing包中,简称为AWT和Swing。其中,AWT是SUN公司最早推出的一套API,它需要利用本地操作系统所提供的图形库,属于重量级组件,不跨平台,它的组件种类有限,可以提供基本的GUI设计工具,却无法实现目前GUI设计所需的所有功能。随后,SUN公司对AWT进行改进,提供了Swing组件,Swing组件由纯Java语言编写,属于轻量级组件,可跨平台,Swing不仅实现了AWT中的所有功能,而且提供了更加丰富的组件和功能,足以满足GUI设计的一切需求。Swing会用到AWT中的许多知识,掌握了AWT,学习Swing就变成了一件很容易的事情,因此本章将从AWT开始学习图形用户界面。

8.1 AWT概述

AWT是用于创建图形用户界面的一个工具包,它提供了一系列用于实现图形界面的组件,如窗口、按钮、文本框、对话框等。在JDK中针对每个组件都提供了对应的Java类,这些类都位于iava.awt包中,接下来通过一个图例来描述这些类的继承关系,如图所示

 从图的继承关系可以看出,在AWT中组件分为两大类,这两类的基类分别是Component和MenuComponent。其中,MenuComponent是所有与菜单相关组件的父类,Component则是除菜单外其他AWT组件的父类,它表示一个能以图形化方式显示出来,并可与用户交互的对象。

Component类通常被称为组件,根据Component的不同作用,可将其分为基本组件类和容器类。基本组件类是诸如按钮、文本框之类的图形界面元素,而容器类则是通过Component的子类Container实例化的对象。Container类表示容器它是一种特殊的组件,可以用来容纳其他组件。Container容器又分为两种类型分别是Window和Panel,接下来对两种类型进行详细讲解。

Window类是不依赖其他容器而独立存在的容器,它有两个子类,分别是Frame类和Dialog类。Frame类用于创建一个具有标题栏的框架窗口,作为程序的主界面,Dialog类用于创建一个对话框,实现与用户的信息交互,如图所示

Panel也是一个容器,但是它不能单独存在,只能存在其他容器 (Window或其子类)中,一个Panel对象代表了一个长方形的区域,在这个区域中可以容纳其他组件。在程序中通常会使用Panel来实现一些特殊的布局。

package cn.itcast.chapter08.example01;import java.awt.Frame;public class Example01 {public static void main(String[] args) {//建立一个新窗体对象Frame f = new Frame("我的窗体!");//设置窗体的宽和高f.setSize(400, 300);//设置窗体在屏幕中所处的位置(参数是左上角坐标)f.setLocation(300, 200);//设置窗体可见f.setVisible(true);}
}

 

8.2 布局管理器 

8.1小节提到过,组件不能单独存在,必须放置于容器当中,而组件在容器中的位置和尺寸是由布局管理器来决定的。在java.awt包中提供了五种布局管理器,分别是FlowLayout (流式布局管理器) 、BorderLayout (边界布局管理器GridLayout(网格布局管理器) 、GridBagLayout (网格包布局管理器)和CardLayout (卡片布局管理器)。每个容器在创建时都会使用一种默认的布局管理器,在程序中可以通过调用容器对象的setLayout()方法设置布局管理器通过布局管理器来自动进行组件的布局管理。例如把一个Frame窗体的布局管理器设置为FlowLayout,代码如下所示:

 FlowLayout

流式布局管理器 (FlowLayout) 是最简单的布局管理器,在这种布局下,容器会将组件按照添加顺序从左向右放置。当到达容器的边界时,会自动将组件放到下一行的开始位置。这些组件可以左对齐、居中对齐(默认方式)或右对齐的方式排列。FlowLayout对象有三个构造方法,如表所示

表中,列出了FlowLayout的三个构造方法,其中,参数align决定组件在每行中相对于容器边界的对齐方式,可以使用该类中提供的常量作为参数传递给构造方法,其中FlowLayout.LEFT用于表示左对齐、FlowLayout.RIGHT用于表示右对齐FlowLayout.CENTER用于表示居中对齐。参数hgap和参数vgap分别设定组件之间的水平和垂直间隙,可以填入一个任意数值。

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;public class Example02 {public static void main(String[] args) {//创建一个名为FlowLayout的窗体Frame f = new Frame("FlowLayout");//设置窗体中的布局管理器FlowLayout,所有组件左对齐,水平间距为20,垂直间距30f.setLayout(new FlowLayout(FlowLayout.LEFT, 20, 30));//设置窗体的大小f.setSize(220, 300);//设置窗体显示位置f.setLocation(300, 200);//把按钮添加到窗口f.add(new Button("第1个按钮"));f.add(new Button("第2个按钮"));f.add(new Button("第3个按钮"));f.add(new Button("第4个按钮"));//设置窗体可见f.setVisible(true);}
}

 

BorderLayout

BorderLayout (边界布局管理器) 是一种较为复杂的布方式,它将容器划分为五个区域,分别是东(EAST)、南(SOUTH)、西(WEST)、北(NORTH)、中(CENTER)。组件可以被放置在这五个区域中的任意一个。BorderLayout布局的效果如图所示

从图可以看出BorderLayout边界布局管理器,将容器划分为五个区域,其中箭头是指改变容器大小时,各个区域需要改变的方向。也就是说,在改变容器时NORTH和SOUTH区域高度不变长度调整,WEST和EAST区域宽度不变高度调整CENTER会相应进行调整。 

当向BorderLayout布局管理器的容器中添加组件时,需要使用add(Componentcomp,Object constraints)方法。其中参数comp表示要添加的组件,constraints指定将组件添加到布局中的方式和位置的对象,它是一个Obiect类型,在传参时可以使用BorderLayout类提供的5个常量,它们分别是EAST、SOUTH、WEST、NORTH和CENTER。

案例代码
接下来通过一个案例来演示一下BorderLayout布局管理器对组件布局的效果:

package cn.itcast.chapter08.example03;import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;public class Example03 {public static void main(String[] args) {Frame f = new Frame("BorderLayout");	//创建一个BorderLayout的窗体f.setLayout(new BorderLayout());	//设置窗体中的布局管理器f.setSize(300, 300);	//设置窗体大小f.setLocation(300, 200);	//设置窗体显示位置f.setVisible(true);		//设置窗体可见//下面代码是创建5个按钮,分别用于填充BorderLayout的5个区域Button but1 = new Button("东部");Button but2 = new Button("西部");Button but3 = new Button("南部");Button but4 = new Button("北部");Button but5 = new Button("中部");//将创建好的按钮添加到窗体中,并设置按钮所在区域f.add(but1,BorderLayout.EAST);f.add(but2,BorderLayout.WEST);f.add(but3,BorderLayout.SOUTH);f.add(but4,BorderLayout.NORTH);f.add(but5,BorderLayout.CENTER);}}

 GridLayout

GridLayout(网格布局管理器) 使用纵横线将容器分成n行m列大小相等的网格每个网格中放置一个组件。添加到容器中的组件首先放置在第1行第1列(左上角)的网格中,然后在第1行的网格中从左向右依次放置其他组件,行满后继续在下一行中从左到右放置组件。与FlowLayout不同的是,放置在GridLayout布局管理器中的组件将自动占据网格的整个区域。

接下来学习下GridLayout的构造方法,如表所示

表中,列出了GridLayout的三个构造方法,其中,参数rows代表行数,cols代表列数,hgap和vgap规定水平和垂直方向的间隙。水平间隙指的是网格之间的水平距离,垂直间隙指的是网格之间的垂直距离。

案例代码

接下来通过一个案例演示GridLayout布局的用法 :

package cn.itcast.chapter08.example04;import java.awt.Button;
import java.awt.Frame;
import java.awt.GridLayout;public class Example04 {public static void main(String[] args) {Frame f = new Frame("GridLayout");	//创建一个GridLayout窗体f.setLayout(new GridLayout(3,3));	//设置GridLayout网格布局管理器,该窗体网格为3*3f.setSize(300, 300);	//设置窗体大小f.setLocation(400, 300);	//设置窗体位置//循环添加9个按钮到GridLayoutfor (int i = 1; i <= 9; i++) {Button but = new Button("but"+i);f.add(but);	//想窗体中添加按钮}f.setVisible(true); //设置窗体可见}
}

GridBagLayout 

GridBagLayout (网格包布局管理器)是最灵活、最复杂的布局管理器。与GridLayout布局管理器类似,不同的是,它允许网格中的组件大小各不相同而且允许一个组件跨越一个或者多个网格

使用GridBagLayout布局管理器的步骤如下:
(1)创建GridbagLayout布局管理器,并使容器采用该布局管理器

(2)创建GridBagontraints对象(布局约束条件),并设置该对象的相关属性 

 (3)调用GridBagLayout对象的setConstraints()方法建立GridBagConstraints对象和受控组件之间的关联

(4)向容器中添加组件

GridBagConstraints对象可以重复使用,只需要改变它的属性即可。如果要向容器中添加多个组件,则重复 (2) 、 (3) 、 (4) 步骤
从上面的步可以看出,使用GridBagLayout布局管理器的关键在于GridBagConstraints对象,它才是控制容器中每个组件布局的核心类,在GridBagConstraints类中有很多表示约束的属性,下面对GridBagConstraints类的一些常用属性进行介绍,如表所示。 


http://chatgpt.dhexx.cn/article/QCjy6HYV.shtml

相关文章

Java GUI——Java图形用户界面

Java GUI——Java图形用户界面 1、Java GUI概述 1.1、GUI的前世今生 早期&#xff0c;电脑向用户提供的是单调、枯燥、纯字符状态的“命令行界面&#xff08;CLI&#xff09;”。如&#xff1a;Windows中的DOS窗口。后来&#xff0c;Apple公司率先在电脑的操作系统中实现了图…

APIGateway 简介

1. APIGateway是什么 APIGateway 即API网关&#xff0c;所有请求首先会经过这个网关&#xff0c;然后到达后端服务&#xff0c;有点类似于Facade模式。API网关作为系统接口对外的统一出口&#xff0c;可以减少调用方对服务实现的感知。 没有API网关时的结系统构如下图&#xff…

aws api gateway 创建一个REST API作为Amazon S3代理

你可能想把样本API导入为Amazon S3的代理&#xff0c;如样本API作为Amazon S3代理的OpenAPI定义所示。关于如何使用OpenAPI定义导入API的说明&#xff0c;请参阅使用OpenAPI配置REST API。 创建API资源来代表Amazon S3资源 我们将使用API的根&#xff08;/&#xff09;资源作…

【AWS系列】第七讲: AWS Serverless之API Gateway

目录 序言 一、基本介绍 1.1 RESTful API 1.2 HTTP API 1.3 WebSocket API 2、使用介绍 2.1 新建 2.2 选类型 2.3 点击构建 2.4 输入参数 2.5 点击创建 2.6 新建方法 2.6 方法测试 三、总结 序言 初步研究一下API Gateway&#xff0c;加油 一、基本介绍 Amazon AP…

一文搞懂 Service Mesh 和 API Gateway 关系和区别

公众号关注 「奇妙的 Linux 世界」 设为「星标」&#xff0c;每天带你玩转 Linux &#xff01; 关于Service Mesh和API Gateway之间的关系&#xff0c;这个问题过去两年间经常被问起&#xff0c;社区也有不少文章和资料给出解答。其中不乏 Christian Posta 这样的网红给出过深度…

aws api gateway 构建一个私有的REST API

你将创建一个私有的REST API。客户只能从你的亚马逊VPC内访问该API。该API与公共互联网隔离&#xff0c;这是一个常见的安全要求。 首先&#xff0c;你使用AWS CloudFormation模板来创建一个亚马逊VPC、一个VPC端点、一个AWS Lambda函数&#xff0c;并启动一个亚马逊EC2实例&am…

AWS Lambda 搭配 Amazon API Gateway (REST API)

AWS Lambda 搭配 Amazon API Gateway (REST API) AWS Lambda 是一种无伺服器、事件推动的运算服务&#xff0c;而 Amazon API Gateway 可以让开发人员轻松地建立、发布、维护、监控和保护任何规模的 API&#xff0c;使用 API Gateway 可以建立 RESTful API 和 WebSocket API&a…

AWS API Gateway与AWS Lambda代理集成构建REST API

项目地址 https://github.com/JessicaWin/aws lambda分支为自动创建API Gateway REST API资源的部署方式apigateway分支为自定义API Gateway REST API资源的部署方式 创建Lambda Handler 创建父模块 使用idea创建一个maven工程: File->New->Project 在左侧菜单栏中…

基于 Amazon API Gateway 的跨账号跨网络的私有 API 集成

一、背景介绍 本文主要讨论的问题是在使用 Amazon API Gateway&#xff0c;通过 Private Integration、Private API 来完成私有网络环境下的跨账号或跨网络的 API 集成。API 管理平台会被设计在单独的账号中(亚马逊云科技提供的是多租户的环境)&#xff0c;因为客观上不同业务…

AWS Lambda 搭配 Amazon API Gateway (HTTP API)

AWS Lambda 搭配 Amazon API Gateway (HTTP API) AWS Lambda 是一种无伺服器、事件推动的运算服务&#xff0c;而 Amazon API Gateway 可以让开发人员轻松地建立、发布、维护、监控和保护任何规模的 API&#xff0c;使用 API Gateway 可以建立 RESTful API 和 WebSocket API&a…

AWS API gateway api CORS错误处理方法

我们开发了一个 AWS lambda 函数&#xff0c;然后我们使用 AWS API gateway服务将它上线。 我们已经测试 API 并验证它是否按照我们的预期工作&#xff0c;看起来真的很棒。 现在我们准备好将 API 端点发送到我们的前端并从网站调用它。 一旦我们这样做了&#xff0c;我们就…

API管理的正确姿势--API Gateway

转载本文需注明出处&#xff1a;微信公众号EAWorld&#xff0c;违者必究。 数字化生态&#xff0c;以创新客户体验为核心&#xff0c;所有我们身边能感知到的变化都来自于渐近的创新。这些创新需要试错&#xff0c;需要不断的升级&#xff0c;并且创新往往与我们熟知的功能分离…

AWS——API Gateway

文章目录 APIHTTP API构建操作*路由*授权集成部署——阶段 REST API构建操作*资源*阶段授权方 自定义域名ACM证书&#xff1f;API 映射 VPC链接REST APIHTTP API子网&#xff1f;安全组&#xff1f; API 选择创建API的类型时&#xff0c;创建的是对公访问的gateway方式&#x…

使用AWS的API Gateway实现websocket

问题 最近业务上面需要使用到WebSocket长连接来解决某些业务场景。 一图胜千言 注意&#xff1a;这里承担WebSocket服务器的是AWS API Gateway&#xff1b;后面的EC2业务服务&#xff0c;其实都是REST接口服务。 这里主要关注API Gateway和REST业务服务怎么实现API Gateway要…

使用API Gateway

使用API Gateway 转自&#xff1a;http://www.open-open.com/lib/view/open1436089902667.html 它讨论了采用微服务的优点和缺点&#xff0c;除了一些复杂的微服务&#xff0c;这种模式还是复杂应用的理想选择。 当你决定将应用作为一组微服务时&#xff0c;需要决定应用客户端…

aws api gateway 创建

在这个章节中&#xff0c;你将创建一个无服务器API。无服务器API让你专注于你的应用&#xff0c;而不是花时间配置和管理服务器。 首先&#xff0c;你使用AWS Lambda控制台创建一个Lambda函数。接下来&#xff0c;你使用API网关控制台创建一个HTTP API。然后&#xff0c;你调用…

微服务实践(二):使用API Gateway

【编者的话】本系列的第一篇介绍了微服务架构模式。它讨论了采用微服务的优点和缺点&#xff0c;除了一些复杂的微服务&#xff0c;这种模式还是复杂应用的理想选择。 点击这里获取云原生干货 当你决定将应用作为一组微服务时&#xff0c;需要决定应用客户端如何与微服务交互。…

AWS API GATEWAY的使用

AWS API GATEWAY 文章目录 1、Create Vpc endpoint2、Target Groups与Load Balancer2.1、Create target type为Instances的Target Groups2.2、Create Application Load Balancer2.3、Create target type为Application Load Balancer的Target Groups2.4、Create Network Load Ba…

API Gateway简介

Amazon API Gateway可以让开发人员创建、发布、维护、监控和保护任何规模的API。你可以创建能够访问 AWS、其他 Web 服务以及存储在 AWS 云中的数据的API。 API Gateway没有最低使用成本&#xff0c;我们用多少服务内容就花费多少。 比如在最新的A Cloud Guru的serverless 会…

API Gateway介绍

使用微服务架构开发应用后&#xff0c;每个微服务都将拥有自己的API&#xff0c;设计应用外部API的任务因客户端的多样性而变得更具有挑战性。不同客户端通常需要不同的数据。通常基于PC浏览器的用户界面显示的信息要远多于移动设备的用户界面。此外&#xff0c;不同的客户端通…