JAVA创建绘图板JAVA构建主窗口鼠标拖动来绘制线条

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,
忍不住分享一下给大家。点击跳转到网站

学习总结

1、掌握 JAVA入门到进阶知识(持续写作中……
2、学会Oracle数据库入门到入土用法(创作中……
3、手把手教你开发炫酷的vbs脚本制作(完善中……
4、牛逼哄哄的 IDEA编程利器技巧(编写中……
5、面经吐血整理的 面试技巧(更新中……

在这里插入图片描述

使用Java实现简单的画图功能

在本篇博客中,我们将介绍如何使用Java语言创建一个简单的图形用户界面(GUI)应用程序,该程序允许用户通过鼠标绘制基本图形。我们将使用Swing库来构建用户界面,并处理鼠标事件以实现绘图功能。

项目设置

首先,确保你的开发环境中已经安装了Java Development Kit (JDK)。如果你还没有安装JDK,可以从Oracle官网下载并按照说明进行安装。接下来,你可以使用任何IDE(如IntelliJ IDEA, Eclipse, 或者NetBeans)来编写代码,或者选择使用文本编辑器和命令行工具。

创建绘图板

我们开始创建一个名为DrawingBoard的类,它将扩展JPanel并重写paintComponent方法用于绘制图形。此外,我们还需要添加鼠标监听器来捕捉用户的鼠标动作。

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;public class DrawingBoard extends JPanel {private static final int WIDTH = 800;private static final int HEIGHT = 600;private Image image;private Graphics2D graphics2D;private int currentX, currentY, oldX, oldY;public DrawingBoard() {setPreferredSize(new Dimension(WIDTH, HEIGHT));setBackground(Color.WHITE);setDoubleBuffered(false);addMouseListener(new MouseAdapter() {public void mousePressed(MouseEvent e) {oldX = e.getX();oldY = e.getY();}});addMouseMotionListener(new MouseAdapter() {public void mouseDragged(MouseEvent e) {currentX = e.getX();currentY = e.getY();if (graphics2D != null) {graphics2D.drawLine(oldX, oldY, currentX, currentY);repaint();oldX = currentX;oldY = currentY;}}});}@Overrideprotected void paintComponent(Graphics g) {if (image == null) {image = createImage(getSize().width, getSize().height);graphics2D = (Graphics2D) image.getGraphics();graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);clear();}g.drawImage(image, 0, 0, null);}public void clear() {graphics2D.setPaint(Color.white);graphics2D.fillRect(0, 0, getWidth(), getHeight());graphics2D.setPaint(Color.black);repaint();}
}
构建主窗口

现在,我们需要创建一个主窗口来容纳我们的DrawingBoard组件。我们将使用JFrame作为主容器,并向其中添加DrawingBoard实例。

import javax.swing.*;public class Main {public static void main(String[] args) {SwingUtilities.invokeLater(() -> {JFrame frame = new JFrame("Simple Drawing Board");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.add(new DrawingBoard());frame.pack();frame.setLocationRelativeTo(null); // Center the windowframe.setVisible(true);});}
}
运行程序

完成上述步骤后,你可以运行Main类中的main方法来启动应用程序。你应该会看到一个窗口弹出,你可以在其中用鼠标拖动来绘制线条。

扩展功能

为了使绘图板更加实用,我们可以考虑添加以下特性:

  • 支持多种颜色和线宽的选择。
  • 提供橡皮擦功能。
  • 添加撤销/重做功能。
  • 允许保存和加载绘图。

这些功能可以通过引入额外的组件(如按钮、菜单等)和状态管理逻辑来实现。随着项目的复杂度增加,你可能需要考虑使用MVC(Model-View-Controller)设计模式来组织代码结构,从而提高可维护性和扩展性。

结语

通过这篇文章,我们了解了如何使用Java Swing库创建一个简单的绘图应用程序。尽管这个示例相对基础,但它为更复杂的图形应用提供了一个良好的起点。希望这篇博客能激发你探索更多关于Java GUI编程的知识。

往期文章

 第一章:日常_JAVA_面试题集(含答案)
 第二章:日常_JAVA_面试题集(含答案)
 平安壹钱包JAVA面试官:请你说一下Mybatis的实现原理
 Java必备面试-热点-热门问题精华核心总结-推荐
 往期文章大全……
在这里插入图片描述

一键三连 一键三连 一键三连~

更多内容,点这里❤

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/503340.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙 ArkUI实现地图找房效果

常用的地图找房功能,是在地图上添加区域、商圈、房源等一些自定义 marker,然后配上自己应用的一些筛选逻辑构成,在这里使用鸿蒙 ArkUI 简单实现下怎么添加区域/商圈、房源等 Marker. 1、开启地图服务 在华为开发者官网,注册应用&…

AI Development Notes 1 - introduction with the OpenAI API Development

Official document:https://platform.openai.com/docs/api-reference/chat/create 1. Use APIfox to call APIs 2.Use PyCharm to call APIs 2.1-1 WIN OS.Configure the Enviorment variable #HK代理环境,不需要科学上网(价格便宜、有安全风险&#…

ComfyUI节点安装笔记

AI高速发展,版本更新相当快(11月25日才安装的版本v.0.3.4,27日版本就已经更新到v.0.3.5了),在遇到问题,找到问题原因所在的过程中,ComfyUI版本、python版本、节点对环境版本的依赖,本…

小白学Pytorch

小白学Pytorch 发现一个比较好的教程,对于自己来说比较合适,适合从零开始的教程。 1、搭建一个简单的网络 https://www.cnblogs.com/PythonLearner/p/13587092.html 搭建网络这步说的比较清楚: 我们使用nn包中的Sequential搭建网络&#…

如何查看服务器上的MySQL/Redis等系统服务状态和列表

如果呢你知道系统服务名称,要看状态很简单: systemctl status server-name 比如 systemctl status nginxsystemctl status redis # 等 这是一个nginx的示例: 那问题是 当你不知道服务名称时该怎么办。举个例子,比如mysql在启动…

ubuntu开机启动服务

需求背景: 需要监控日志,每次都是手动启动 nohup ./prometheus >/dev/null & nohub ./node_exporter >/dev/null & 需求目标: 重启后系统自动启动服务

路由组件与一般组件的区别

路由组件与一般组件的区别 1. 基本概念 1.1 路由组件 路由组件是指通过路由规则映射的组件,通常放在 pages 或 views 文件夹中。 1.2 一般组件 一般组件是指通过 import 导入后直接使用的组件,通常放在 components 文件夹中。 2. 主要区别 2.1 存…

Qt天气预报系统设计界面布局第四部分右边

Qt天气预报系统 1、第四部分右边的第一部分1.1添加控件 2、第四部分右边的第二部分2.1添加控件 3、第四部分右边的第三部分3.1添加控件3.2修改控件名字 1、第四部分右边的第一部分 1.1添加控件 拖入一个widget,改名为widget04r作为第四部分的右边 往widget04r再拖…

数据库系统概论期末复习

期末考试题型: 选择题 20题 20分 判断题 10题 10分 简答题 4题 20分 SQL语句: (select delete update)30分 设计题:ER图 和关系模式 ER转关系模式,注意主码,外码的标注 15分 应用题:…

uni-app 页面生命周期及组件生命周期汇总(Vue2、Vue3)

文章目录 一、前言🍃二、页面生命周期三、Vue2 页面及组件生命周期流程图四、Vue3 页面及组件生命周期流程图4.1 页面加载时序介绍4.2 页面加载常见问题4.3 onShow 和 onHide4.4 onInit4.5 onLoad4.6 onReachBottom4.7 onPageScroll4.8 onBackPress4.9 onTabItemTap…

微信小程序中 “页面” 和 “非页面” 的区别

微信小程序中 “页面” 和 “非页面” 的区别,并用表格进行对比。 核心概念: 页面 (Page): 页面是微信小程序中用户可以直接交互的视图层,也是小程序的基本组成部分。每个页面都有自己的 WXML 结构、WXSS 样式和 JavaScript 逻辑…

【Linux】传输层协议UDP

目录 再谈端口号 端口号范围划分 UDP协议 UDP协议端格式 UDP的特点 UDP的缓冲区 UDP注意事项 进一步深刻理解 再谈端口号 在上图中,有两个客户端A和B,客户端A打开了两个浏览器,这两个客户端都访问同一个服务器,都访问服务…

大数据架构演变

一、离线数仓 缺点: ETL计算、存储、时间成本高数据处理链路过长无法支持实时、近实时的数据分析数据采集对业务库造成影响 二、Lambda架构,离线实时分开 缺点: 组件多,不方便管理很难保证数据一致数据探查困难,出现…

进程间通讯

简介: 进程间通讯方式有: 1.内存映射(mmap): 使用mmap函数将磁盘空间映射到内存 2.管道 3.信号 4.套接字(socket) 5.信号机制 通过进程中kill函数,去给另一个函数发送信号&a…

毕业项目推荐:基于yolov8/yolov5的行人检测识别系统(python+卷积神经网络)

文章目录 概要一、整体资源介绍技术要点功能展示:功能1 支持单张图片识别功能2 支持遍历文件夹识别功能3 支持识别视频文件功能4 支持摄像头识别功能5 支持结果文件导出(xls格式)功能6 支持切换检测到的目标查看 二、数据集三、算法介绍1. YO…

[桌面运维]windows自动设置浅深色主题

设置自动浅色/深色主题 我看很多up主的教程过于繁琐,需要添加四个功能,并且有些还不能生效! 大多数都是教程: 自动任务栏浅色 add HKCUSOFTWAREMicrosoftWindowsCurrentVersionThemesPersonalize/v SystemUsesLightTheme /t …

LQ quarter 5th

目录 B. 开赛主题曲 C. BlueAI E. 精准难度 B. 开赛主题曲 (1)两层循环枚举所有子串。第一层子串长度,第二层子串起点 (2)判子串是否合法还要一个 for,26 * 26 * 2e5 快要超时,因此计算每个字母…

Directx12 chapter4

官方的初始化需要的组件 Initialize 初始化涉及到首次设置全局变量和类,initialize 函数必须准备管道和资产。 初始化管道。 启用调试层。创建设备。创建命令队列。创建交换链。创建渲染器目标视图 (RTV) 描述符堆。 备注 可将描述符堆视为描述符的数组。 其中…

STM32 软件I2C读写

单片机学习! 目录 前言 一、软件I2C读写代码框架 二、I2C初始化 三、六个时序基本单元 3.1 引脚操作的封装和改名 3.2 起始条件执行逻辑 3.3 终止条件执行逻辑 3.4 发送一个字节 3.5 接收一个字节 3.5 发送应答&接收应答 3.5.1 发送应答 3.5.2 接…

计算机网络--UDP和TCP课后习题

【5-05】 试举例说明有些应用程序愿意采用不可靠的UDP, 而不愿意采用可靠的TCP。 解答: 这可能有以下几种情况。 首先,在互联网上传输实时数据的分组时,有可能会出现差错甚至丢失。如果利用 TCP 协议对这些出错或丢失的分组进行重传&…