当前位置: 首页 > news >正文

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 主要特性

  1. 基于操作系统的原生组件: AWT 中的组件是 重量级组件(heavyweight components),即它们直接依赖于底层操作系统的窗口系统(如 Windows 或 X11)。这导致 AWT 的外观和行为通常会随平台的不同而有所不同。

  2. 事件驱动模型: AWT 使用事件驱动编程模型来响应用户的输入。开发者通过事件监听器处理鼠标、键盘等输入事件。这一机制使得 AWT 能够提供交互式的界面。

  3. 跨平台: AWT 提供了跨平台的图形界面组件,但由于它依赖于底层操作系统的窗口组件,所以它的表现和外观会受到操作系统的影响。

  4. 简单的布局管理器: AWT 提供了多种布局管理器(如 FlowLayoutBorderLayoutGridLayout),用于帮助开发者控制组件在容器中的布局。

  5. 低级图形支持: AWT 提供了对基本图形(如线条、矩形、圆形、文本)的支持,开发者可以在窗口中绘制简单的图形。

AWT 继承体系

AWT 的继承体系可以从几个核心类开始理解,主要的类包括 ComponentContainerWindow 等,这些类通过继承关系形成了 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 的子类,表示可以包含其他组件的容器。它本身不能单独显示,但可以用来容纳其他组件(如 ButtonLabel 等)。容器本身不直接显示内容,而是管理其他组件的布局。
  • 容器类主要用于管理和显示多个子组件。
  • 关键方法:
    • add(Component comp):将组件添加到容器中。
    • setLayout(LayoutManager mgr):设置容器的布局管理器。
  • 常见的容器类
    • Frame:代表一个应用程序的主窗口,通常包含标题栏和菜单栏。
    • Panel:面板,允许将多个组件组合成一个区域。
    • Dialog:对话框,通常用于显示消息或获取用户输入。
    • ScrollPane:具有滚动条的容器。

4. java.awt.Window

  • Window 类是 Component 的直接子类,它表示一个顶级窗口或对话框。在 AWT 中,所有的顶级窗口(如 FrameDialog)都继承自 Window 类。
  • 关键方法:
    • setVisible(boolean b):控制窗口的可见性。
    • setSize(int width, int height):设置窗口的大小。
    • setLocation(int x, int y):设置窗口的位置。
  • 常见的 Window 类子类
    • Frame:代表一个具有边框和标题的主窗口。
    • Dialog:代表一个弹出式对话框窗口。

5. java.awt.Frame

  • FrameWindow 类的一个子类,表示一个具有边框和标题栏的窗口。它通常是一个应用程序的主窗口。
  • Frame 类提供了用于管理应用窗口的各种功能,如关闭窗口、设置大小、设置菜单等。
  • 关键方法:
    • setTitle(String title):设置窗口的标题。
    • setMenuBar(MenuBar mb):设置窗口的菜单栏。
    • addWindowListener(WindowListener listener):添加窗口事件监听器。

6. java.awt.Panel

  • PanelContainer 的一个子类,表示一个没有边框的面板,通常用于容纳多个组件。面板常用于组织窗口中的布局和设计。
  • 它允许对组件进行布局,并且是一个容器,通常用于构建更复杂的用户界面。
  • 关键方法:
    • setLayout(LayoutManager mgr):设置面板的布局管理器。

AWT 组件的继承体系总结

  • 所有 AWT 组件最终都继承自 java.awt.Component
  • 容器 是继承自 Container 类的,容器负责管理和布局其中的组件。
  • 顶级窗口(如 FrameDialog)继承自 Window 类,它们都是 Component 的直接或间接子类。
  • 通过继承关系,开发者可以自定义自己的 GUI 组件,继承 ComponentContainer 类,并在其中实现自定义的绘制或布局功能。

AWT 组件

AWT 包括多种用于构建 GUI 的组件(如按钮、文本框、标签等)。这些组件在 AWT 中都是类的实例,通常需要添加到容器(如 FramePanel)中。

1. 顶级容器
  • Frame:代表应用程序的主窗口。一个应用程序通常只有一个 Frame
  • Dialog:表示一个对话框窗口,用于显示提示或接受用户输入。
  • FileDialog:用于文件选择的对话框。
  • Window:一个顶级窗口的类,可以用于创建无边框的窗口。
2. 组件
  • Button:按钮组件。
  • Label:标签组件,用于显示文本。
  • TextField:文本输入框,用于单行文本输入。
  • TextArea:文本区域,用于多行文本输入。
  • CheckBox:复选框,用于选择项。
  • RadioButton:单选按钮,用于在多个选项中选择一个。
  • List:列表组件,用于显示项目的列表。
  • Choice:下拉列表框。
  • Scrollbar:滚动条组件。
  • MenuMenuItem:菜单及菜单项组件。
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&#xff0c;mindspore lite 部署在树莓派4B ubuntu22.04中&#xff0c;为后续操作开个门&#xff01; 环境 开发环境&#xff1a;wsl-ubuntu22.04分发版部署环境&#xff1a;树莓派4B&#xff0c;操作系统为ubuntu22.04mindspore lite版本&#xff1a;mindspore-li…...

Idea汉化插件Datagrip汉化插件

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

精彩回顾|Cocos开发者沙龙长沙站

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

算法日记 49 day 图论(A*算法)

这算是算法的最后一篇了&#xff0c;原本A*之前还有一些相关的最短路径算法的&#xff0c;比如dijkstra的堆优化&#xff0c;SPFA等等&#xff0c;但是有些我没看懂&#xff0c;就不写了&#xff0c;用A*做个结尾。 题目&#xff1a;骑士的攻击 127. 骑士的攻击 (kamacoder.co…...

服务器批量清理redis keys,无法适用客户端必须直连的情况

在 Redis 中&#xff0c;批量清理指定模式的键&#xff08;例如 memberCardData:*&#xff09;可以通过多种方法来实现。需要注意的是&#xff0c;Redis 的命令执行是单线程的&#xff0c;因此对大量键进行操作时可能会阻塞服务器。以下是几种常见的方法&#xff1a; shell K…...

Grafana配置告警规则推送企微机器人服务器资源告警

前提 已经部署Grafana&#xff0c;并且dashboard接入数据 大屏编号地址&#xff1a;Node Exporter Full | Grafana Labs 创建企微机器人 备注&#xff1a;群里若有第三方外部人员不能创建 机器人创建完成&#xff0c;记录下来Webhook地址 Grafana配置告警消息模板 {{ define &…...

数字货币金融研究,深度学习虚拟币价格预测 数据集 市值top20 (2014年—2024年)

比特币&#xff0c;以太坊&#xff0c;狗狗币&#xff0c;屎币&#xff0c;模因币 声明 此数据集的目的是 用于数字货币金融研究&#xff0c;深度学习虚拟币价格预测 1、数据集 2014年——2024年 市值top20 比特币&#xff0c;以太坊&#xff0c;屎币&#xff0c;狗狗币交易…...

druid.properties图标是齿轮

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

【图像处理】利用numpy、opencv、python实现车牌检测

| 利用opencv实现车牌检测 整体流程涉及5个部分 图像通道转换对比度增强边缘连接二值化边界区域裁剪 图像通道转换 将RGB图像转换为HSV图像&#xff0c;仅保留V通道。V通道表示颜色的明暗&#xff0c;常用于图像对比度拉伸、直方图均衡化等流程。 原图像&#xff1a; V通…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...