鼠标监听器和动作监听器运用及部分绘制功能的实现
提示文章写完后目录可以自动生成如何生成可参考右边的帮助文档文章目录前言一、整体思路二、涉及知识点含回顾内容1.Graphics2.两个数学工具三、DrawUI1. 窗体2. 功能按钮3. 监听器四、DrawListener1.实现接口2.全局变量3. 按钮4. 鼠标拖拽点获取5. 鼠标单击 mouseClicked完成任意三角形前言本篇笔记基于画图工具设计任务讲解鼠标监听器和动作监听器运用实现直线、矩形、任意三角形绘制等功能。一、整体思路整个项目分为两个类DrawUI 负责搭建主窗体、创建功能按钮、获取画笔对象、添加各类监听器、实现对象传递等。DrawListener 实现监听接收窗体传递的画笔根据鼠标动作、按钮选择完成图形绘制。二、涉及知识点含回顾内容1.Graphics注意画笔必须在窗体jf.setVisible(true);之后获取。通过窗体对象.getGraphics()拿到画笔对象采用引用传递将画笔传入监听器全局变量让监听器具备绘图能力。常用绘图方法drawLine(x1,y1,x2,y2)绘制直线drawRect(起点x,起点y,宽,高)绘制矩形setColor修改画笔颜色2.两个数学工具Math.abs(数值)求绝对值计算图形实际宽度、高度解决反向拖拽导致x2-x1为负无法执行的情况Math.min(a,b)取两个坐标最小值使矩形左上角为画笔起始点三、DrawUI1. 窗体创建JFrame窗体对象设置窗体尺寸、标题、屏幕居中、关闭程序规则设置流式布局FlowLayout让按钮横向排布自动换行3.必须在添加所有组件之后最后执行jf.setVisible(true);显示窗口2. 功能按钮依次创建多个按钮使用jf.add(按钮对象)使按钮全部添加到窗体上。3. 监听器实例化事件处理类DrawListener给窗体绑定鼠标监听器给所有功能按钮绑定动作监听器实现代码package ls.DrawUI;import javax.swing.*;import java.awt.*;public class DrawUI{publicvoidinitUI(){JFrame jfnewJFrame();jf.setSize(800,800);jf.setTitle(画图工具);jf.setLocationRelativeTo(null);jf.setDefaultCloseOperation(3);jf.setVisible(true);DrawListener listenernewDrawListener();jf.addMouseListener(listener);Graphics gjf.getGraphics();listener.grg;}publicstaticvoidmain(String[]args){DrawUI uinewDrawUI();ui.initUI();}}四、DrawListener1.实现接口必须重写所有抽象方法。2.全局变量1.Graphics gr接收窗体传递过来的画笔2. 坐标变量x1,y1,x2,y2,x3,y3存储鼠标按下、松开、再次点击的点位3.String name存储当前点击按钮文字用来判断要绘制哪种图形4.int flag标记位控制代码执行顺序实现任意三角形分步选点。3. 按钮点击按钮时通过e.getActionCommand()获取按钮文字存入全局变量name完成绘图模式切换。4. 鼠标拖拽点获取1.mousePressed鼠标按下记录起点坐标x1、y12.mouseReleased鼠标松开记录终点坐标x2、y2拖拽完成根据当前按钮模式绘制直线 / 矩形若选中三角形仅绘制底边线段同时flag条件判断后识别第三个顶点。5. 鼠标单击 mouseClicked完成任意三角形选中三角形模式、拖拽完成底边后再次窗体单击获取第三个点x3,y3分别连接底边两个端点与第三个点位闭合形成完整任意三角形重置标记位。实行代码import javax.swing.*;import java.awt.*;public class DrawUI{publicvoidinitUI(){JFrame jfnewJFrame();jf.setSize(800,800);jf.setTitle(画图工具);jf.setLocationRelativeTo(null);jf.setDefaultCloseOperation(3);FlowLayout flownewFlowLayout();jf.setLayout(flow);JButton jbunewJButton(直线);jf.add(jbu);JButton jbu2newJButton(矩形);jf.add(jbu2);JButton jbu3newJButton(三角形);jf.add(jbu3);JButton rednewJButton(红色);jf.add(red);jf.setVisible(true);Graphics gjf.getGraphics();DrawListener listenernewDrawListener();jf.addMouseListener(listener);jbu.addActionListener(listener);jbu2.addActionListener(listener);jbu3.addActionListener(listener);listener.grg;}publicstaticvoidmain(String[]args){DrawUI uinewDrawUI();ui.initUI();}}import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;public class DrawListener implements MouseListener,ActionListener{public Graphics gr;publicintx1,y1,x2,y2,x3,y3;public String name;publicintflag1;publicvoidactionPerformed(ActionEvent e){namee.getActionCommand();}publicvoidmouseClicked(MouseEvent e){if(三角形.equals(name)){x3e.getX();y3e.getY();gr.drawLine(x1,y1,x3,y3);gr.drawLine(x2,y2,x3,y3);flag1;}}publicvoidmousePressed(MouseEvent e){if(flag1){x1e.getX();y1e.getY();}}publicvoidmouseReleased(MouseEvent e){if(flag1){x2e.getX();y2e.getY();}intwMath.abs(x1-x2);intmxMath.min(x1,x2);if(直线.equals(name)){gr.drawLine(x1,y1,x2,y2);}if(矩形.equals(name)){gr.drawRect(mx,y1,w,y2-y1);}if(三角形.equals(name)){gr.drawLine(x1,y1,x2,y2);flag;}}publicvoidmouseEntered(MouseEvent e){}publicvoidmouseExited(MouseEvent e){}}

相关新闻

FreeType 字体引擎入门指南:从编译到字符像素转换

FreeType 字体引擎入门指南:从编译到字符像素转换

目录 一、FreeType的定义及作用 二、FreeType的源码下载与编译 环境: 源码下载: 源码编译: 三、FreeType转换实战 初始化字体库 单个字符的转换 字符串的转换 转换思路 示例1 示例2 示例3 示例4 示例5 四、释放 五、结语 一…

2026/8/20 15:01:23 阅读更多 →
FreeRTOS队列深度解析:从原理到实战,掌握嵌入式多任务通信核心

FreeRTOS队列深度解析:从原理到实战,掌握嵌入式多任务通信核心

1. 从“单打独斗”到“协同作战”:为什么嵌入式开发离不开队列 在嵌入式系统开发,尤其是基于FreeRTOS这类实时操作系统的项目中,我们常常会面临一个核心矛盾:多个任务(Task)之间如何安全、高效地交换数据&a…

2026/8/19 13:07:24 阅读更多 →
基于ESP32与蠕动泵的自动调酒机:从硬件选型到软件实现的完整DIY指南

基于ESP32与蠕动泵的自动调酒机:从硬件选型到软件实现的完整DIY指南

1. 项目概述:从“调酒师”到“自动化调酒师”的转变 几年前,我在家里招待朋友,想露一手调几杯经典的鸡尾酒,结果手忙脚乱,不是忘了加冰就是糖浆比例不对,场面一度十分尴尬。从那时起,我就琢磨着…

2026/8/20 15:11:57 阅读更多 →

最新新闻

如何用Python绘制精美地图:Prettymaps开源项目完全指南 [特殊字符]️

如何用Python绘制精美地图:Prettymaps开源项目完全指南 [特殊字符]️

如何用Python绘制精美地图:Prettymaps开源项目完全指南 🗺️ 【免费下载链接】prettymaps Draw pretty maps from OpenStreetMap data! Built with osmnx matplotlib shapely 项目地址: https://gitcode.com/GitHub_Trending/pr/prettymaps 你是…

2026/8/20 15:39:41 阅读更多 →
抖音评论采集5分钟搞定:一键导出全量评论区到Excel的完整指南

抖音评论采集5分钟搞定:一键导出全量评论区到Excel的完整指南

抖音评论采集5分钟搞定:一键导出全量评论区到Excel的完整指南 【免费下载链接】TikTokCommentScraper 项目地址: https://gitcode.com/gh_mirrors/ti/TikTokCommentScraper TikTokCommentScraper 是一款免费开源的抖音评论采集工具,能在几分钟内…

2026/8/20 15:39:41 阅读更多 →
2026年答辩PPT生成用哪款?4款工具清单实测

2026年答辩PPT生成用哪款?4款工具清单实测

论文定稿只是第一步,答辩PPT才是压垮很多人的最后一根稻草。排版、提炼重点、梳理逻辑,一晚上全搞定几乎不可能,好在现在有专门的答辩PPT生成工具能接手这部分工作。这篇就基于实际测试,把市面上四款主流工具的真实表现摊开来说。…

2026/8/20 15:39:41 阅读更多 →
Prettymaps性能优化终极指南:7个技巧快速减少数据获取时间

Prettymaps性能优化终极指南:7个技巧快速减少数据获取时间

Prettymaps性能优化终极指南:7个技巧快速减少数据获取时间 【免费下载链接】prettymaps Draw pretty maps from OpenStreetMap data! Built with osmnx matplotlib shapely 项目地址: https://gitcode.com/GitHub_Trending/pr/prettymaps Prettymaps是一个基…

2026/8/20 15:39:41 阅读更多 →
TrollInstallerX 安装教程:iOS 14.0–16.6.1 一键装好 TrollStore 的完整指南(附避坑速查表)

TrollInstallerX 安装教程:iOS 14.0–16.6.1 一键装好 TrollStore 的完整指南(附避坑速查表)

TrollInstallerX 安装教程:iOS 14.0–16.6.1 一键装好 TrollStore 的完整指南(附避坑速查表) 【免费下载链接】TrollInstallerX A TrollStore installer for iOS 14.0 - 16.6.1 项目地址: https://gitcode.com/gh_mirrors/tr/TrollInstalle…

2026/8/20 15:39:41 阅读更多 →
玩转 tmux-power 状态栏:日期与时间格式(strftime)自定义详解

玩转 tmux-power 状态栏:日期与时间格式(strftime)自定义详解

玩转 tmux-power 状态栏:日期与时间格式(strftime)自定义详解 【免费下载链接】tmux-power 🎨 Tmux powerline theme 项目地址: https://gitcode.com/gh_mirrors/tm/tmux-power tmux-power 是一款基于 Powerline 风格的高颜…

2026/8/20 15:38:40 阅读更多 →

日新闻

Framework笔记本BIOS更新变砖,“可维修”承诺遭遇芯片级维修考验!

Framework笔记本BIOS更新变砖,“可维修”承诺遭遇芯片级维修考验!

Framework笔记本BIOS更新引“变砖”危机2026年7月7日,Framework向用户quantum5发送邮件,建议其安装BIOS 3.20更新。然而,更新后电脑出现严重问题,屏幕显示三角形和随机像素图案,风扇狂转,系统完全挂起。qua…

2026/8/20 0:00:46 阅读更多 →
2026还在担忧建站平台哪家好?手把手带你搭建自家网站!

2026还在担忧建站平台哪家好?手把手带你搭建自家网站!

2026还在担忧建站平台哪家好?手把手带你搭建自家网站!据艾瑞咨询发布的《2026年中国企业数字化服务市场研究报告》,2025年国内网站建设市场规模已达896亿元,同比增长18.7%。中国互联网络信息中心数据显示,截至2025年底…

2026/8/20 0:00:46 阅读更多 →
2026高端网站建设公司哪家好?怎么选才能不花冤枉钱?

2026高端网站建设公司哪家好?怎么选才能不花冤枉钱?

2026高端网站建设公司哪家好?怎么选才能不花冤枉钱?据艾瑞咨询《2026年中国企业数字化服务市场研究报告》,2025年国内网站建设市场规模已达896亿元,其中高端定制网站服务占比突破42%。更值得关注的是,91%的规模以上企业…

2026/8/20 0:00:46 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/8/19 11:55:16 阅读更多 →

月新闻

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

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

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

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

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

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

2026/8/19 7:42:22 阅读更多 →
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/19 11:55:13 阅读更多 →