JAVA 图形界面编程 AWT篇(1)
前言
为了应对JAVA课设,小编走上了java的图形界面编程的道路,通过博客分享自己的学习历程,并进行笔记的记录。
AWT(Abstract Window Toolkit)介绍
AWT(抽象窗口工具包)是 Java 最早的图形用户界面(GUI)框架之一,主要用于构建桌面应用程序的图形界面。最初在 JDK 1.0 版本中作为 Java GUI 的核心库引入,旨在提供一个跨平台的图形用户界面工具包。
AWT 的最大特点是 平台依赖性,即它依赖于底层操作系统的窗口系统来创建和渲染界面组件。由于这一点,AWT 的组件在不同操作系统上可能表现出不同的外观和行为。
后续我们将介绍基于纯JAVA实现的swing、
尽管如此,AWT 仍然是 Java 图形界面编程的重要部分,尤其是在较老的 Java 应用程序中。
AWT 主要特性
-
基于操作系统的原生组件: AWT 中的组件是 重量级组件(heavyweight components),即它们直接依赖于底层操作系统的窗口系统(如 Windows 或 X11)。这导致 AWT 的外观和行为通常会随平台的不同而有所不同。
-
事件驱动模型: AWT 使用事件驱动编程模型来响应用户的输入。开发者通过事件监听器处理鼠标、键盘等输入事件。这一机制使得 AWT 能够提供交互式的界面。
-
跨平台: AWT 提供了跨平台的图形界面组件,但由于它依赖于底层操作系统的窗口组件,所以它的表现和外观会受到操作系统的影响。
-
简单的布局管理器: AWT 提供了多种布局管理器(如
FlowLayout
、BorderLayout
和GridLayout
),用于帮助开发者控制组件在容器中的布局。 -
低级图形支持: AWT 提供了对基本图形(如线条、矩形、圆形、文本)的支持,开发者可以在窗口中绘制简单的图形。
AWT 继承体系
AWT 的继承体系可以从几个核心类开始理解,主要的类包括 Component
、Container
、Window
等,这些类通过继承关系形成了 AWT 组件的层次结构。
AWT 继承体系结构图
Object|java.awt.Component/ | \java.awt.Container java.awt.Window|java.awt.Frame|java.awt.Panel
1. Object
- 所有 Java 类的祖先类。
2. java.awt.Component
Component
是 AWT 类库中所有图形组件的基类,几乎所有的图形组件(如按钮、文本框、标签等)都直接或间接地继承自Component
类。Component
类提供了处理图形组件的位置、大小、绘制、事件等功能。- 关键方法:
setSize(int width, int height)
:设置组件的大小。setLocation(int x, int y)
:设置组件的位置。paint(Graphics g)
:重绘组件的方法,通常用于自定义组件的外观。addActionListener(ActionListener listener)
:添加事件监听器。
3. java.awt.Container
Container
类是Component
的子类,表示可以包含其他组件的容器。它本身不能单独显示,但可以用来容纳其他组件(如Button
、Label
等)。容器本身不直接显示内容,而是管理其他组件的布局。- 容器类主要用于管理和显示多个子组件。
- 关键方法:
add(Component comp)
:将组件添加到容器中。setLayout(LayoutManager mgr)
:设置容器的布局管理器。
- 常见的容器类:
Frame
:代表一个应用程序的主窗口,通常包含标题栏和菜单栏。Panel
:面板,允许将多个组件组合成一个区域。Dialog
:对话框,通常用于显示消息或获取用户输入。ScrollPane
:具有滚动条的容器。
4. java.awt.Window
Window
类是Component
的直接子类,它表示一个顶级窗口或对话框。在 AWT 中,所有的顶级窗口(如Frame
、Dialog
)都继承自Window
类。- 关键方法:
setVisible(boolean b)
:控制窗口的可见性。setSize(int width, int height)
:设置窗口的大小。setLocation(int x, int y)
:设置窗口的位置。
- 常见的
Window
类子类:Frame
:代表一个具有边框和标题的主窗口。Dialog
:代表一个弹出式对话框窗口。
5. java.awt.Frame
Frame
是Window
类的一个子类,表示一个具有边框和标题栏的窗口。它通常是一个应用程序的主窗口。Frame
类提供了用于管理应用窗口的各种功能,如关闭窗口、设置大小、设置菜单等。- 关键方法:
setTitle(String title)
:设置窗口的标题。setMenuBar(MenuBar mb)
:设置窗口的菜单栏。addWindowListener(WindowListener listener)
:添加窗口事件监听器。
6. java.awt.Panel
Panel
是Container
的一个子类,表示一个没有边框的面板,通常用于容纳多个组件。面板常用于组织窗口中的布局和设计。- 它允许对组件进行布局,并且是一个容器,通常用于构建更复杂的用户界面。
- 关键方法:
setLayout(LayoutManager mgr)
:设置面板的布局管理器。
AWT 组件的继承体系总结
- 所有 AWT 组件最终都继承自
java.awt.Component
。 - 容器 是继承自
Container
类的,容器负责管理和布局其中的组件。 - 顶级窗口(如
Frame
、Dialog
)继承自Window
类,它们都是Component
的直接或间接子类。 - 通过继承关系,开发者可以自定义自己的 GUI 组件,继承
Component
或Container
类,并在其中实现自定义的绘制或布局功能。
AWT 组件
AWT 包括多种用于构建 GUI 的组件(如按钮、文本框、标签等)。这些组件在 AWT 中都是类的实例,通常需要添加到容器(如 Frame
或 Panel
)中。
1. 顶级容器
- Frame:代表应用程序的主窗口。一个应用程序通常只有一个
Frame
。 - Dialog:表示一个对话框窗口,用于显示提示或接受用户输入。
- FileDialog:用于文件选择的对话框。
- Window:一个顶级窗口的类,可以用于创建无边框的窗口。
2. 组件
- Button:按钮组件。
- Label:标签组件,用于显示文本。
- TextField:文本输入框,用于单行文本输入。
- TextArea:文本区域,用于多行文本输入。
- CheckBox:复选框,用于选择项。
- RadioButton:单选按钮,用于在多个选项中选择一个。
- List:列表组件,用于显示项目的列表。
- Choice:下拉列表框。
- Scrollbar:滚动条组件。
- Menu 和 MenuItem:菜单及菜单项组件。
3. 布局管理器
- FlowLayout:组件按顺序排列,默认从左到右排列。
- BorderLayout:将容器分为五个区域:北(NORTH)、南(SOUTH)、东(EAST)、西(WEST)、中(CENTER)。
- GridLayout:以网格的方式排列组件,所有单元格大小相同。
- CardLayout:类似卡片的布局,允许容器中显示一个组件的“卡片”。
- GridBagLayout:更灵活的网格布局,可以调整组件的大小和位置。
4. 事件模型
- ActionListener:响应按钮、菜单等可触发动作的组件。
- MouseListener:响应鼠标事件。
- KeyListener:响应键盘事件。
- WindowListener:响应窗口的打开、关闭、激活等事件。
- ItemListener:响应复选框、单选按钮等的状态改变。
一个简单的程序
import java.awt.*;
import java.awt.event.*;public class SimpleAWTApp {public static void main(String[] args) {// 创建一个 Frame 对象Frame frame = new Frame("AWT 示例");// 创建按钮并设置点击事件Button button = new Button("点击我");button.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {System.out.println("按钮被点击");}});// 创建文本框TextField textField = new TextField("请输入文本");// 设置布局管理器为 FlowLayoutframe.setLayout(new FlowLayout());// 将组件添加到 frame 中frame.add(button);frame.add(textField);// 设置 frame 大小frame.setSize(300, 200);// 设置关闭操作frame.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}});// 显示 frameframe.setVisible(true);}
}
结束语
下节开始我们将对相关组件进行介绍!!!
相关文章:
JAVA 图形界面编程 AWT篇(1)
前言 为了应对JAVA课设,小编走上了java的图形界面编程的道路,通过博客分享自己的学习历程,并进行笔记的记录。 AWT(Abstract Window Toolkit)介绍 AWT(抽象窗口工具包)是 Java 最早的图形用户界…...

C语言 字符串输入输出函数、scanf(“%[^\n]“,)可输入空格 、fgets删除换行符
字符串输入函数: scanf("%s",数组名) gets(数组名) fgets() --- 文件流输入函数 函数原型: int scanf( const char *format, ...…...

【蓝桥杯每日一题】推导部分和——带权并查集
推导部分和 2024-12-11 蓝桥杯每日一题 推导部分和 带权并查集 题目大意 对于一个长度为 ( N ) 的整数数列 A 1 , A 2 , ⋯ , A N A_1, A_2, \cdots, A_N A1,A2,⋯,AN ,小蓝想知道下标 ( l ) 到 ( r ) 的部分和 ∑ i l r A i A l A l 1 ⋯ A r \sum_{…...

Linux 磁盘满了怎么办?快速排查和清理方法
当 Linux 磁盘满了,会导致系统无法正常运行,比如无法写入文件、服务停止、甚至系统崩溃。因此,快速排查并清理磁盘空间是非常重要的。以下是详细的排查和解决步骤: 一、快速定位磁盘占用原因 1. 检查磁盘使用情况 使用 df 命令查…...

【专题】2024年中国新能源汽车用车研究报告汇总PDF洞察(附原数据表)
原文链接: https://tecdat.cn/?p38564 本年度,国家及地方政府持续发力,推出诸多政策组合拳,全力推动汽车产业向更高质量转型升级,积极鼓励消费升级,并大力推行以旧换新等惠民生、促发展举措。尤为引人注目…...

数据结构之链表笔试题详解
一:移除链表元素 我们很容易就可以想到一个解决方案:再创建一个链表,把不是val的结点拿过来尾插。 这样确实可以但是,我们每次尾插都需要遍历一遍整个链表,这样时间复杂度就变成了O(n^2), 因此我们不妨设…...

结构化的Prompt
资源库: AI 提示词-WayToAGI精选高效的AI提示词库,助力创作者和开发者解锁人工智能的潜力。通过我们的提示词和策略,优化您的AI工具使用效率,激发创意思维,提升产出质量。https://www.waytoagi.com/prompts?tag6 结构…...

【数字化】华为数字化转型架构蓝图
导读:华为的数字化转型规划团队在2016年年底基于对愿景的系统诠释,整合出了数字化转型架构蓝图。该蓝图共分为5层,旨在通过数字化转型实现客户交互方式的转变、作战方式的转变、公司各平台业务能力的数字化、服务化以及运营模式的转变。 目录…...

最新全开源IM即时通讯系统源码(PC+WEB+IOS+Android)部署指南
全开源IM(即时通讯)系统源码部署是一个复杂但系统的过程,涉及多个组件和步骤。以下是一个详细的部署指南,旨在帮助开发者或系统管理员成功部署一个全开源的IM系统,如OpenIM。 IM即时通讯系统源码准备工作 …...
go 跨平台打包
GOARCH是Go语言中的一个环境变量,用于指定目标平台的底层架构。在Go的交叉编译过程中,GOARCH决定了编译出的二进制文件将在哪种硬件架构上运行。 GOARCH的常见值 amd64:64位 x86 架构386:32位 x86 架构arm&am…...
C++ 给定字符串,然后给出开始要取的位置,返回取到的信息
3 happy new year 7 year 1 new 4 new year year error input #include <stdio.h> #include <string.h> void strmcpy(char* s, char* t, int m); int main() {int repeat, m;char t[1000], s[1000];scanf("%d", &repeat);getchar(); //吸收换行符in…...

【树莓派4B】MindSpore lite 部署demo
一个demo,mindspore lite 部署在树莓派4B ubuntu22.04中,为后续操作开个门! 环境 开发环境:wsl-ubuntu22.04分发版部署环境:树莓派4B,操作系统为ubuntu22.04mindspore lite版本:mindspore-li…...

Idea汉化插件Datagrip汉化插件
汉化插件 Chinese (Simplified) Language Pack / 中文语言包 插件地址 安装完了之后,如果还不是中文的怎么办 需要手动设置 Seetings -> Appearance & Behavior -> System Settings -> Language and Region -> Language 修改为 [ Chi…...

精彩回顾|Cocos开发者沙龙长沙站
长沙-不一样 Cocos 开发者沙龙长沙站,完全超出了我们的预期,一开始还担心没有太多人报名。最后发现,全场爆满,座无虚席。 <<< 左右滑动见更多 >>> 许多小伙伴曾反馈过,在以往的开发者沙龙回顾文章中…...

算法日记 49 day 图论(A*算法)
这算是算法的最后一篇了,原本A*之前还有一些相关的最短路径算法的,比如dijkstra的堆优化,SPFA等等,但是有些我没看懂,就不写了,用A*做个结尾。 题目:骑士的攻击 127. 骑士的攻击 (kamacoder.co…...
服务器批量清理redis keys,无法适用客户端必须直连的情况
在 Redis 中,批量清理指定模式的键(例如 memberCardData:*)可以通过多种方法来实现。需要注意的是,Redis 的命令执行是单线程的,因此对大量键进行操作时可能会阻塞服务器。以下是几种常见的方法: shell K…...

Grafana配置告警规则推送企微机器人服务器资源告警
前提 已经部署Grafana,并且dashboard接入数据 大屏编号地址:Node Exporter Full | Grafana Labs 创建企微机器人 备注:群里若有第三方外部人员不能创建 机器人创建完成,记录下来Webhook地址 Grafana配置告警消息模板 {{ define &…...
数字货币金融研究,深度学习虚拟币价格预测 数据集 市值top20 (2014年—2024年)
比特币,以太坊,狗狗币,屎币,模因币 声明 此数据集的目的是 用于数字货币金融研究,深度学习虚拟币价格预测 1、数据集 2014年——2024年 市值top20 比特币,以太坊,屎币,狗狗币交易…...

druid.properties图标是齿轮
一、问题 在IDEA中, druid.properties图标是齿轮 二、原因 2023版本开始,IDEA新的UI的问题 三、解决方法 1、点击右上角的齿轮图标 2、点击Settings 3、Appearance & Behavior---->New UI---->取消勾选“Enable new UI”---->右下角OK 4…...

【图像处理】利用numpy、opencv、python实现车牌检测
| 利用opencv实现车牌检测 整体流程涉及5个部分 图像通道转换对比度增强边缘连接二值化边界区域裁剪 图像通道转换 将RGB图像转换为HSV图像,仅保留V通道。V通道表示颜色的明暗,常用于图像对比度拉伸、直方图均衡化等流程。 原图像: V通…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...

el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...

Ubuntu Cursor升级成v1.0
0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...
Java详解LeetCode 热题 100(26):LeetCode 142. 环形链表 II(Linked List Cycle II)详解
文章目录 1. 题目描述1.1 链表节点定义 2. 理解题目2.1 问题可视化2.2 核心挑战 3. 解法一:HashSet 标记访问法3.1 算法思路3.2 Java代码实现3.3 详细执行过程演示3.4 执行结果示例3.5 复杂度分析3.6 优缺点分析 4. 解法二:Floyd 快慢指针法(…...