第一个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类结束

三、存在的问题

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

猜你喜欢

转载自www.cnblogs.com/liuyuewei/p/10777116.html