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通…...
中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...
【WebSocket】SpringBoot项目中使用WebSocket
1. 导入坐标 如果springboot父工程没有加入websocket的起步依赖,添加它的坐标的时候需要带上版本号。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dep…...
解析两阶段提交与三阶段提交的核心差异及MySQL实现方案
引言 在分布式系统的事务处理中,如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议(2PC)通过准备阶段与提交阶段的协调机制,以同步决策模式确保事务原子性。其改进版本三阶段提交协议(3PC…...
数据库正常,但后端收不到数据原因及解决
从代码和日志来看,后端SQL查询确实返回了数据,但最终user对象却为null。这表明查询结果没有正确映射到User对象上。 在前后端分离,并且ai辅助开发的时候,很容易出现前后端变量名不一致情况,还不报错,只是单…...
内窥镜检查中基于提示的息肉分割|文献速递-深度学习医疗AI最新文献
Title 题目 Prompt-based polyp segmentation during endoscopy 内窥镜检查中基于提示的息肉分割 01 文献速递介绍 以下是对这段英文内容的中文翻译: ### 胃肠道癌症的发病率呈上升趋势,且有年轻化倾向(Bray等人,2018&#x…...
大模型真的像人一样“思考”和“理解”吗?
Yann LeCun 新研究的核心探讨:大语言模型(LLM)的“理解”和“思考”方式与人类认知的根本差异。 核心问题:大模型真的像人一样“思考”和“理解”吗? 人类的思考方式: 你的大脑是个超级整理师。面对海量信…...
使用python进行图像处理—图像滤波(5)
图像滤波是图像处理中最基本和最重要的操作之一。它的目的是在空间域上修改图像的像素值,以达到平滑(去噪)、锐化、边缘检测等效果。滤波通常通过卷积操作实现。 5.1卷积(Convolution)原理 卷积是滤波的核心。它是一种数学运算,…...
数据挖掘是什么?数据挖掘技术有哪些?
目录 一、数据挖掘是什么 二、常见的数据挖掘技术 1. 关联规则挖掘 2. 分类算法 3. 聚类分析 4. 回归分析 三、数据挖掘的应用领域 1. 商业领域 2. 医疗领域 3. 金融领域 4. 其他领域 四、数据挖掘面临的挑战和未来趋势 1. 面临的挑战 2. 未来趋势 五、总结 数据…...
基于谷歌ADK的 智能产品推荐系统(2): 模块功能详解
在我的上一篇博客:基于谷歌ADK的 智能产品推荐系统(1): 功能简介-CSDN博客 中我们介绍了个性化购物 Agent 项目,该项目展示了一个强大的框架,旨在模拟和实现在线购物环境中的智能导购。它不仅仅是一个简单的聊天机器人,更是一个集…...
