实现效果:

1.用鼠标在画板上拖拽实现画线条:

2.右击鼠标点击指定的颜色可切换画笔颜色,再次拖拽实现画线条:

代码实现:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;//简单手绘画板
public class HandDraw {JFrame frame = new JFrame("简单手绘画板");//定义画图区的宽度和高度private final int AREA_WIDTH = 800;private final int AREA_HEIGHT = 700;//定义右键菜单,用来设置画笔的颜色private PopupMenu colorMenu = new PopupMenu();private MenuItem redItem = new MenuItem("红色");private MenuItem greenItem = new MenuItem("绿色");private MenuItem blueItem = new MenuItem("蓝色");//记录当前画笔的颜色private Color newColor = Color.black;//默认为黑色//创建BufferedImage位图对象private BufferedImage image = new BufferedImage(AREA_WIDTH,AREA_HEIGHT,BufferedImage.TYPE_INT_RGB);//通过位图获取关联的Graphice对象Graphics graphics = image.getGraphics();//定义变量记录鼠标拖拽移动过程中,上一次的坐标private int preX = -1;private int preY = -1;private class MyCanvas extends Canvas {//定义画板@Overridepublic void paint(Graphics g) {g.drawImage(image,0,0,null);}}MyCanvas drawArea = new MyCanvas();//创建画板public void init(){ActionListener listener = new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {//单击执行的操作String actionCommand = e.getActionCommand();//获取鼠标右击的内容switch(actionCommand){case "红色":newColor = Color.red;break;case "绿色":newColor = Color.green;break;case "蓝色":newColor = Color.blue;break;}}};redItem.addActionListener(listener);greenItem.addActionListener(listener);blueItem.addActionListener(listener);colorMenu.add(redItem);colorMenu.add(greenItem);colorMenu.add(blueItem);//将colorMenu设置给drawArea绘图区drawArea.add(colorMenu);//frame.add(colorMenu);drawArea.addMouseListener(new MouseAdapter() {@Overridepublic void mouseReleased(MouseEvent e) {//当鼠标点击释放时boolean p = e.isPopupTrigger();if(p){//在绘画区域指定的xy轴上单击绘图colorMenu右击菜单键colorMenu.show(drawArea,e.getX(),e.getY());}//鼠标抬起时重置preX和preYpreX = -1;preY = -1;}});//通过监听鼠标的移动,来绘制线条drawArea.addMouseMotionListener(new MouseMotionAdapter() {@Overridepublic void mouseDragged(MouseEvent e) {//鼠标拖拽if(preX > 0 && preY > 0){//获取指定的颜色graphics.setColor(newColor);//绘制线条,需要两坐标接收上一次的起点位置和终点位置graphics.drawLine(preX,preY,e.getX(),e.getY());}//刷新preX和preY的坐标preX = e.getX();preY = e.getY();//绘图drawArea.repaint();}});//设置位图属性graphics.setColor(Color.white);graphics.fillRect(0,0,AREA_WIDTH,AREA_HEIGHT);drawArea.setPreferredSize(new Dimension(AREA_WIDTH,AREA_HEIGHT));//设置绘图宽高frame.add(drawArea);frame.setLocation(600,150);frame.pack();frame.setVisible(true);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}public static void main(String[] args) {new HandDraw().init();}
}

用BufferedImage和Graphics实现简单鼠标手绘画板(Java)相关推荐

  1. 利用Python GUI写一个简单的绘画板

    先说废话,再上代码 这个绘画板主要运用了Python自带的标准GUI库Tkinter,包含了画笔颜色选择,背景布颜色选择,橡皮擦,清屏,保存图片等功能. from tkinter import * f ...

  2. tkinter Canvas 实现 鼠标手绘画板 功能

    下面代码简单实现了手绘画板功能,其实也是Canvas的教程,后面都给加了注释. 这里通过列表来存储笔画,实现撤销恢复功能,右键有菜单. import tkinter as tk from tkinte ...

  3. [python opencv 计算机视觉零基础到实战] 十九、简易绘画板制作

    一.学习目标 了解事件 编写一个简易绘画板 二.了解如何制作简易绘画板 2.1 了解鼠标多种事件 上一节我们简单的使用opencv的图形绘制方法,用鼠标绘制了一些内容.上一节所响应的是简单的双击事件E ...

  4. Java源码-简单手绘程序

    使用BufferedImage保存手绘图片,使用DrawCanvas作为画布,响应鼠标拖曳操作,描绘红.蓝.绿三种颜色的直线. 代码如下:(摘自<疯狂Java讲义>第11章) import ...

  5. java简单手绘程序

    package CrazyJava;import java.awt.*; import java.awt.image.*; import java.awt.event.*; import javax. ...

  6. 用Java实现简单的画画画板

    用Java实现简单的画画画板 一:代码 先直接上代码吧,备注大部分都在代码中. import java.awt.*; import javax.swing.*; import java.util.*; ...

  7. c语言画板,简单的像素画板(C语言编写)

    在2017年的时侯通过C语言和EasyX图形库编写了一个简单的像素绘图画板,当时是因为看了一个制作小游戏的视频,然后不知道干啥看到了一种像素风的图片,脑袋一热就写了一个像素绘画板. 话不多说,将代码分 ...

  8. 在 iOS 中使用 OpenGL ES 实现绘画板

    作者:lyman 来源: http://www.lymanli.com/2020/01/04/ios-opengles-paint/ 今天我们使用 OpenGL ES 来实现一个绘画板,主要介绍在 O ...

  9. android 绘画开源,Android 开源可缩放平移的绘画板

    ScaleSketchPadDemo 此项目包含两个模块 app1 为普通绘画板 app2 为可所发的绘画板 方便各位Android 开发者理解和使用 用法: clone or download 项目 ...

最新文章

  1. 错误LNK1107文件无效或损坏: 无法在 0x338 处读取
  2. variable ‘‘ of type ‘‘ referenced from scope ‘‘, but it is not defined 异常解决方法
  3. vlc延时处理-跳帧
  4. 《系统集成项目管理工程师》必背100个知识点-49质量管理的流程
  5. android快速打包工具下载,【Android】多渠道打包,其实可以更快
  6. hdu 3577Fast Arrangement
  7. linux系统故障实验,Linux常见系统故障排除
  8. Android 集成支付宝支付,支付宝支付2.0
  9. 微信公众帐号开发教程第14篇-自定义菜单的创建及菜单事件响应
  10. 「代码随想录」本周学习小结!(动态规划系列五)
  11. 2021年数学建模国赛C题问题一详细思路和代码
  12. 什么是无卡支付、快捷支付、通用代扣?他们有什么区别?
  13. uni-app使用阿里矢量图库导入 icon 彩色和黑白色
  14. 给年轻工程师的10大忠告
  15. Python 微信公众号文章爬取
  16. 微信域名检测接口文档
  17. 【React Native】react-native-vector-icons用法避坑
  18. js阿拉伯数字转中文汉字小写 支持到12位
  19. ai新视觉:一键解决模糊图片高清精准修复
  20. 蒸发水量(mm/s)和 潜热通量(W/m2) 之间的单位转化

热门文章

  1. 中高级Java面试题
  2. 小孩子语录——庆祝六一儿童节
  3. 软凝聚态物理基础开发工具包(前情提要)
  4. 【云原生之Docker实战】使用docker部署webssh工具
  5. 如何在winds局域网环境下建立网站
  6. Spyder导出的图片不清晰
  7. 2016年找实习血泪史(上篇)
  8. filebeat的模块收集日志和kibana制作图表
  9. 【文件技巧-File.separator 文件分隔符】
  10. servlet3.0中 @WebServlet注解无效的情况