第一个java画板小项目代码,最后面有问题哦,欢迎交流。

一、主窗体代码

package com.mr.draw;//类所在的包名
import javax.swing.JFrame;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.image.BufferedImage;

import javax.swing.JFrame;//引入窗体类
/**
 * 画主体窗体
 * */
public class DrawPictureFrame extends JFrame     {
    BufferedImage image = new BufferedImage(570,390,BufferedImage.TYPE_INT_BGR);//创建一个八位BGR颜色分量的图像; BufferedImage类描述了一个 Image与访问图像数据缓冲区。
    Graphics gs = image.getGraphics();//获取图像的绘图对象
    Graphics2D g = (Graphics2D)gs;//将绘图对象转换为Graphics2D类型
    DrawPictureCanvas canvas = new DrawPictureCanvas();//创建画布对象
    Color foreColor = Color.black;//定义前景颜色
    Color backgroundColor = Color.white;//定义背景颜色
    int x = -1;//上一次鼠标绘制点的横坐标
    int y = -1;//上一次鼠标绘制点的纵坐标
    boolean rubber = false;//橡皮识别变量
    /**
     * 构造方法
     * */
    public DrawPictureFrame() {//继承窗体类
        setResizable(false);//窗体不能该表大小
        setTitle("画图程序");//设置标题
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗体关闭则停止程序
        setBounds(500,100,574,460);//设置窗口位置和宽高
        init();//组件初始化
        addListener();//添加组件监听
    }
    /**
     * 组价初始化
     * */
    private void init() {
        g.setColor(backgroundColor);//用背景设置绘图对象的颜色
        g.fillRect(0, 0, 570,390);//用背景填充整个画布
        g.setColor(foreColor);//
        canvas.setImage(image);//
        getContentPane().add(canvas);//将画布添加到窗体容器默认布局的中部位置
    }
    /**
     * 为组件添加动作监听
     * */
    private void addListener() {
        //画板添加鼠标移动事件监听
        canvas.addMouseMotionListener(new MouseMotionAdapter() {
            public void mouseDragged(final MouseEvent e) {//当鼠标拖动
                if(x > 0 && y > 0) {//如果x 和y存在鼠标记录
                    if(rubber) {//如果橡皮标识为true,表示使用橡皮
                        g.setColor(backgroundColor);//绘制工具使用背景色
                        g.fillRect(x, y, 100, 100);//在鼠标滑过的位置画填充填充的正方形
                    }else {//如果鼠标标识为false,表示用画笔画图
                        g.drawLine(x,y,e.getX(),e.getY());//在鼠标滑过的位置画直线
                    }//else结束
                }//if结束
                x = e.getX();//上一次鼠标绘制点的横坐标
                y = e.getY();//上一次鼠标绘制点的纵坐标
                canvas.repaint();//更新画布
            }//mouseDragged()结束
        });//canvas.addMouseMotionListener()结束
        canvas.addMouseListener(new MouseAdapter() {//画板添加鼠标点击事件监听
            public void mouseReleased(final MouseEvent arg0) {//当按键抬起时
                x = -1;//将记录上一次鼠标绘制点的横坐标恢复成-1
                y = -1;//将记录上一次鼠标绘制点的纵坐标恢复成-1
            }//mouseReleased()结束
        });;//canvas.addMouseListener()结束
    }//addListener()结束
    /**
     * 程序运行主方法
     * @author 帅气的威少
     * */
    public static void main(String[] args) {
        DrawPictureFrame frame = new DrawPictureFrame();//创建窗体对象
        frame.setVisible(true);//让窗体可见
    }//mian()结束

}//DrawPictureFrane类结束

二、画板代码

package com.mr.draw;
import java.awt.Image;
import java.awt.Canvas;
import java.awt.Graphics;
/**
 * 简笔画展示窗体
 * */
public class DrawPictureCanvas extends Canvas {
    private Image image = null;
    /**
     * 设置画板上的图片
     * @author 帅气的威少
     * */
    public void setImage(Image image) {
        this.image = image;
    }
    /**
     * 重写paint()方法,在画布上绘制图像
     * */
    public void paint(Graphics g) {
        g.drawImage(image,0,0,null);
    }
    /**
     * 重写update()方法,这样可以解决屏幕闪烁的问题
     * */
    public void update(Graphics g) {
        paint(g);//调用paint方法
    }//update(Graghics g)方法结束
}//DrawPictureCanvas类结束

三、存在的问题

代码基本都能看懂,但是自己写的话,又写不出来,无从下手,没有找到好的方法,有没有遇到相同问题的小伙伴,欢迎分享你的学习经验?

原文地址:https://www.cnblogs.com/liuyuewei/p/10777116.html

时间: 2024-08-04 14:45:47

第一个java画板小项目代码,最后面有问题哦,欢迎交流。的相关文章

用webmagic实现一个java爬虫小项目

一.环境       项目:maven项目 数据库:mysql 二.项目介绍 我们要爬去的页面是https://shimo.im/doc/iKYXMBsZ5x0kui8P 假设我们需要进入这个页面,爬取页面里面的所有电影百度云链接,并保存在mysql数据库里. 三.pom.xml配置 首先我们需要新建一个maven项目,并在pom.xml配置如下jar包. <?xml version="1.0" encoding="UTF-8"?> <projec

福利贴——爬取美女图片的Java爬虫小程序代码

自己做的一个Java爬虫小程序 废话不多说,先上图. 文件夹命名是用标签缩写,如果大家看得不顺眼可以等下载完成后手动改一下,比如像有强迫症的我一样... 这是挂了一个晚上下载的总大小,不过还有很多因为一些问题没有遍历下载到,而且会产生很多空文件,最下面我附带了一个递归删除空文件夹的小程序代码. 接下来是文件夹内部~ 图片存放位置默认为d:\picture,可在程序中更改,main函数的开头就是,有注释.爬取的网站为http://www.mmonly.cc/,大家有更好的资源网站可以私我. 爬虫源

最近做了一个Spring Boot小项目,大家帮忙找找bug吧, http://www.dbeetle.cn

最近做了一个Spring Boot小项目,网站顶部有源码地址,欢迎大家访问 http://www.dbeetle.cn 欢迎各位访问,提出意见,找找bug 网站说明 甲壳虫社区(Beetle Community) 一个开源的问答社区.论坛博客,您可以提出自己的问题.发布自己的文章.和其他用户交流 目前功能有第三方登陆.查看.发布.评论.消息通知.顶置.一键已读.搜索等 后续会不断更新完善,欢迎大家提供更好的建议 使用技术 Spring Boot.Mybatis.Thymeleaf.BootStr

一个Java恶搞小程序

运用Java程序控制某个应用程序的运行(以网易云音乐为例),步骤如下 1.建立bat文件分别是start.bat(控制程序的运行)和kill.bat(控制程序的结束): start.bat 的内容如下,功能是运行程序: cmd /c start F:\\00网易云音乐\\CloudMusic\\cloudmusic.exe exit 具体情况可以视具体情况改写你的应用的安装路径即可 kill.bat的内容如下,功能是结束程序进程: taskkill /f /im "cloudmusic.exe&

第一个Asp.net小项目,主页写了下后台代码

一个比较完善的登录模块,就目前的知识范围来说应该算是完美的. 涉及到:cookies,Session,验证码等知识面 Cookies存放一组值: HttpCookie cook = new HttpCookie("userCook"); cook.Values["name"] = this.TextBox1.Text; cook.Values["pwd"] = this.TextBox2.Text; cook.Expires = DateTime

自建一个Java Spring MVC项目

用IDEA Intellij,本来创建的是SpringMVC项目,但是下载的时候,太慢了.所以还是用的Maven项目. 选择Maven 项目->Archetype->Web application. 本来需要增加参数-DarchetypeCatalog=internal, 但是发现也不用了,应该是已经下载了. 首先将webapp->WEBINF->web.xml,改一下: <?xml version="1.0" encoding="UTF-8&q

掷骰子游戏窗体实现--Java初级小项目

掷骰子 **多线程&&观察者模式 题目要求:<掷骰子>窗体小游戏,在该游戏中,玩家初始拥有1000的金钱,每次输入押大还是押小,以及下注金额,随机3个骰子的点数,如果3个骰子的总点数小于等于9,则开小,否则开大,然后判断玩家是否押对,如果未押对则扣除下注金额,如果押对则奖励和玩家下注金额相同的金钱. 分析:这个题目要求灵活运用多线程的相关知识,达到点击开始按钮时,有3个线程启动,分别控制3颗骰子的转动,在3颗骰子全部转完以后,回到主线程计算游戏结果. 1 //3个线程控制3颗骰

[转] 使用Git进行小项目代码管理

http://www.uml.org.cn/pzgl/201206155.asp 之前在公司使用过SVN(无甚感觉)和ClearCase(把人恶心死的东西)两种版本控制工具,都不满意.后来想自己写点东西玩,就发现了这个在国内人气还不怎么高的Git,这个由Linus实现的灵活小巧的VCS.对它的印象差不多可以这么说:“我被萌到了”. 通过采用不同类型的工作流,Git可以适用于各种大小规模的项目.这里介绍一下针对最简单的集中式工作流的配置方式,适合个人和小型团队使用. 注:本文只是一个快速流程,要详

跟我一起做一个vue的小项目(四)

接下来我们进行的是轮播页面下面的导航页的开发 我们需要的是实现轮播页下面的图标,并且实现轮播效果 这个话,其实基本思路先是渲染出小图标,然后,我们要对页数进行判断,如果图标的个数展示的就是8个,那个这个就是一页轮播 如果大于8个,我们要计算是显示几个轮播页.再根据这个轮播页我们去渲染的数据 //icons.vue <template> <div class="icons"> <swiper> <!-- 这个是轮播的页数 --> <s