图形重绘与数组学习小结
在开发画图工具的过程中我遇到了一个问题为什么画好的图形在窗口最小化或被遮挡后就会消失我利用“数组”和“重绘机制”解决了这个问题。问题的根源最初我的绘图逻辑非常直接在鼠标事件如 mouseReleased中直接通过 Graphics 对象调用 drawLine 或 drawRect 方法。然而我很快发现一旦窗口需要刷新例如被其他窗口遮挡后重新显示或最小化后还原所有绘制的内容都会消失。这是因为绘图上下文是临时的Graphics 对象就像一块画布我们直接在上面画画。但操作系统或窗口管理器在需要时如窗口刷新会清空这块画布并调用组件的 paint() 方法要求组件“重绘”自己。缺乏数据记忆我的程序只记录了“画”这个动作但没有记录“画了什么”。当 paint() 方法被系统自动调用时它不知道之前画过哪些图形因此只能呈现一个空白的面板。解决方案数据与视图分离为了解决这个问题我采用了“数据与视图分离”的思想。核心思路是不再直接“画”图而是“记录”图形数据然后让程序根据数据自动“重绘”。这个方案主要包含三个步骤1创建数据模型 (Shapes 类)我创建了一个 Shapes 类它不再负责绘制而是作为一个纯粹的数据容器。它包含了描述一个图形所需的所有属性例如name: 图形的类型如“直线”、“矩形”。x1, y1, x2, y2…: 图形的顶点坐标。这个类就像一张“图纸”只记录图形的规格不负责施工。2使用数组 (shapeArr)在事件监听器 DrawListener 中我定义了一个 Shapes 类型的数组 shapeArr。每当用户完成一个图形的绘制例如在 mouseReleased 方法中画完一条直线后程序会创建一个新的 Shapes 对象。将图形的类型和坐标等信息填充到这个对象中。将这个对象存入 shapeArr 数组并让索引 index 加一。这样所有绘制过的图形信息都被持久化地保存在了内存的数组中即使窗口刷新数据也不会丢失。重写 paint 方法实现自动重绘 (Mpanel 类)这是实现持久化显示的关键一步。我创建了一个自定义面板 Mpanel并重写了它的 paint 方法。paint 方法是Swing组件的绘制方法。每当组件需要显示时系统就会自动调用它。通过在这个方法里遍历 shapeArr 数组程序就能根据数组中保存的所有“图纸”将图形一个不落地重新绘制出来。3.总结通过这次实践我深刻理解到在Swing等GUI编程中所有持久的视觉内容都应该在 paint 或 paintComponent 方法中生成。错误做法在事件处理方法中直接获取 Graphics 对象进行绘制。这只适合临时性的视觉效果如鼠标拖拽时的预览。正确做法在事件中更新数据模型如将图形信息存入数组然后调用 repaint() 方法在我的代码中窗口刷新会自动触发 paint通知系统“数据变了请调用 paint 方法重绘”。paint 方法会根据最新的数据模型完整地重建整个界面。

相关新闻

跨境数据流动合规指南:GDPR、PIPL与CLOUD法案下的技术架构挑战与破局

跨境数据流动合规指南:GDPR、PIPL与CLOUD法案下的技术架构挑战与破局

1. 跨境数据流动的“巴别塔”:一个全球性难题的缘起如果你在一家业务遍布全球的科技公司工作,或者负责过涉及海外用户数据的项目,那么“数据跨境”这个词,大概率会让你眉头一皱。这绝不是一个简单的技术传输问题,而是一…

2026/8/17 9:09:06 阅读更多 →
Mac本地部署OpenClaw:从环境配置到性能优化的完整指南

Mac本地部署OpenClaw:从环境配置到性能优化的完整指南

1. 项目概述:为什么要在Mac上折腾OpenClaw?最近在开发者圈子里,OpenClaw这个名字的讨论热度不低。简单来说,它是一个开源的、旨在提供类似某些云端智能助手核心能力的本地化项目。对于Mac用户,尤其是开发者、研究者和对…

2026/8/20 3:26:45 阅读更多 →
ADP Claw插件开发实战:构建企业级API集成与数据处理平台

ADP Claw插件开发实战:构建企业级API集成与数据处理平台

1. 项目缘起:从“玩具”到“工具”的ADP Claw进化之路最近在折腾一个企业内部的数据聚合与自动化任务,核心需求是把分散在十几个不同业务系统(CRM、ERP、OA、自研监控平台)里的数据,定时抓取、清洗后,统一推…

2026/8/17 16:46:06 阅读更多 →

最新新闻

SpringBoot个人财务管理系统完整源码与实战项目

SpringBoot个人财务管理系统完整源码与实战项目

简介:本项目是一个基于SpringBoot框架开发的轻量级个人财务管理Web应用,面向个人用户提供收支记录、账户管理、分类统计与可视化报表等核心功能。依托SpringBoot自动配置、内嵌Tomcat及Spring Data JPA等特性,系统具备高可维护性、易扩展性和…

2026/8/22 20:13:00 阅读更多 →
DBCHM完整指南:多格式数据库字典一键生成

DBCHM完整指南:多格式数据库字典一键生成

DBCHM完整指南:多格式数据库字典一键生成 【免费下载链接】DBCHM DBCHM修改版本,支持导出数据库字典分组 The modified version of dbchm supports exporting database dictionary groups ( chm/word/markdown/html) 项目地址: https://gitcode.com/gh…

2026/8/22 20:13:00 阅读更多 →
jPOS 快速上手:Java 里搞定 ISO 8583 报文处理,10 分钟跑起 Q2 服务

jPOS 快速上手:Java 里搞定 ISO 8583 报文处理,10 分钟跑起 Q2 服务

jPOS 快速上手:Java 里搞定 ISO 8583 报文处理,10 分钟跑起 Q2 服务 【免费下载链接】jPOS jPOS Project 项目地址: https://gitcode.com/gh_mirrors/jp/jPOS 想在 Java 里处理银行卡报文?jPOS 是标准答案——一个开源的 ISO 8583 支付协议框架,自带的 Q2 服务能用一条…

2026/8/22 20:13:00 阅读更多 →
LLM引导的多智能体协作奖励设计:原理、实现与工程实践

LLM引导的多智能体协作奖励设计:原理、实现与工程实践

1. 项目概述:当大语言模型成为多智能体协作的“激励设计师”最近在复现和优化一些多智能体强化学习(Multi-Agent Reinforcement Learning, MARL)的实验时,我反复被一个问题卡住:奖励函数的设计。尤其是在合作型任务中&…

2026/8/22 20:13:00 阅读更多 →
System76固件问题剖析:开源硬件生态的固件挑战与用户自救指南

System76固件问题剖析:开源硬件生态的固件挑战与用户自救指南

最近在折腾一台老笔记本,想装个 Linux 系统,顺手搜了下硬件兼容性。结果,一个反复出现的名字让我停下了鼠标:System76。这个以预装 Linux 和开源硬件闻名的品牌,在社区论坛和 Hacker News 上,却有不少用户正…

2026/8/22 20:12:00 阅读更多 →
熵权法实战:从信息熵原理到Python实现,解决多指标权重分配难题

熵权法实战:从信息熵原理到Python实现,解决多指标权重分配难题

1. 项目概述:从“拍脑袋”到“算权重”的决策跃迁在数据分析、项目评估、管理决策的日常工作中,我们常常面临一个核心难题:如何给一堆指标分配合理的权重?是凭感觉“拍脑袋”决定,还是领导“一言堂”?这些方…

2026/8/22 20:12:00 阅读更多 →

日新闻

沉金PCB工艺实战指南:从设计到SMT焊接的可靠性保障

沉金PCB工艺实战指南:从设计到SMT焊接的可靠性保障

在电子硬件开发领域,PCB(印制电路板)的沉金工艺是提升产品可靠性和焊接质量的关键环节。对于需要高密度互连、长期稳定运行或高频信号传输的板卡,如“黍姐仿通行证”这类可能涉及身份识别、数据交互的硬件项目,选择正确…

2026/8/22 0:00:11 阅读更多 →
电气考研电路八月强化四步法:从知识体系到真题实战的闭环攻略

电气考研电路八月强化四步法:从知识体系到真题实战的闭环攻略

这次我们来看一个针对电气考研电路科目的学习规划项目。它不是软件工具,而是一套聚焦于8月份关键节点的备考策略。对于电气工程考研的同学来说,电路分析是专业课的重中之重,也是拉开分差的关键。进入8月,复习进入强化阶段&#xf…

2026/8/22 0:00:11 阅读更多 →
消除AI代码的“AI味”:Claude Code设计优化技能配置与实战指南

消除AI代码的“AI味”:Claude Code设计优化技能配置与实战指南

大家好,我是专注于前端开发与AI工具实践的技术博主。在日常使用 Claude Code 等AI编程助手时,你是否也遇到过这样的困扰:生成的代码功能上没问题,但代码风格、组件设计、交互逻辑总透着一股“AI味”——布局单调、样式简陋、交互生…

2026/8/22 0:00:11 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/21 3:21:33 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/22 8:09:09 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/21 6:07:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/22 18:08:39 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/22 7:31:03 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/22 3:22:48 阅读更多 →