Java项目——画图软件

简介

作者简介:青铜码农,和大多数同学一样从零开始一步步学习,一步步积累。期待您的关注,让我们一起成长~注:本人学疏才浅,文章如有错误之处,敬请指正~

本章节内容简介:仿Windows系统自带的画图工具。此项目包含了设置画笔粗细、选择画笔颜色、选择背景颜色、绘制图像、清除图像、使用橡皮擦、简笔画窗口等功能。

所需技术如下图:

功能预览:
 

画图完整版视频

功能结构:

搭建项目

01导入资源

02创建DrawPictureFrame窗体类

03创建DrawPictureCanvas画板类

04添加鼠标画笔功能

05添加工具栏

06添加菜单栏

07实现添加水印功能

08添加鼠标效果

09添加简笔画对照窗口

实现过程

一、导入外部Jar包

DrawUtil.mr.Jar包中的类说明:

com.mr.util.BackgroundPanel:可以添加背景图片的面板类

com.mr.util.DrawImageUtil:绘图工具类,提供保存图片的方法

com.mr.util.FrameGetShape:兼容图形选择组件接口

com.mr.util.Shapes:图形选择组件返回的图形类

com.mr.util.ShapeWindow:图形选择组件类

二、创建可视窗体

创建DrawPictureFrame.java这个类,并将下面代码输入到类中:

​
/**
 * 画图主窗体。
 */
public class DrawPictureFrame extends JFrame {// 继承窗体类
​
    /**
     * 构造方法。
     */
    public DrawPictureFrame() {
        ImageIcon imageIcon = new ImageIcon("src/img/picture/themeicon.png");
        Image image = imageIcon.getImage();
        setIconImage(image);// 设置窗体图标
        setResizable(false);// 窗体不能改变大小
        setTitle("画图(水印内容:[\" + shuiyin + \"])");// 设置标题,添加水印内容提示
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(500, 100, 574, 460);
    }
​
    /**
     * 启动程序
     */
    public static void main(String[] args) {
        DrawPictureFrame frame = new DrawPictureFrame();
        frame.setVisible(true);
    }
} 

三、创建画板

import java.awt.*;
​
/**
 * @author WayLon
 * @create 2021-07-28 14:39
 * 备注:创建面板
 */
public class DrawPictureCanvas extends Canvas {
    private Image image = null;
​
    /**
     * 设置画板中的图片
     *
     * @param image - 画板中展示的图片对象
     */
    public void setImage(Image image) {
        this.image = image;
    }
​
    /**
     * 重写paint()方法,在画布上绘制图像
     *
     * @param g
     */
    public void paint(Graphics g) {
        g.drawImage(image, 0, 0, null);
    }
​
    /**
     * 重写update()方法,这样可以解决屏幕闪烁的问题。
     *
     * @param g
     */
    public void update(Graphics g) {
        paint(g);
    }
​
}

并在DrawPictureFrame类中原有代码上新增一下代码:

第5-10、22、25-34行代码为新增代码

/**
 * 画图主窗体。
 */
public class DrawPictureFrame extends JFrame {// 继承窗体类
    BufferedImage image = new BufferedImage(570, 390, BufferedImage.TYPE_INT_BGR);// 创建一个8位BGR颜色分量的图像
    Graphics gs = image.getGraphics();// 获得图像的绘图对象
    Graphics2D g = (Graphics2D) gs;// 将绘图图像转换为Graphics2D类型
    DrawPictureCanvas canvas = new DrawPictureCanvas();//创建画布对象
    Color forecolor = Color.BLACK;// 定义前景色,在这里可以把前景色理解为画笔颜色
    Color bacgroundColor = Color.WHITE;// 定义背景色
    /**
     * 构造方法。
     */
    public DrawPictureFrame() {
        ImageIcon imageIcon = new ImageIcon("src/img/picture/themeicon.png");
        Image image = imageIcon.getImage();
        setIconImage(image);// 设置窗体图标
        setResizable(false);// 窗体不能改变大小
        setTitle("画图(水印内容:[\" + shuiyin + \"])");// 设置标题,添加水印内容提示
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(500, 100, 574, 460);
        init();// 组件初始化
    }
​
    /**
     * 组件初始化
     */
    private void init() {
        g.setColor(bacgroundColor);
        g.fillRect(0, 0, 570, 390);// 用背景色填充整个画布
        g.setColor(forecolor);
        canvas.setImage(image);
        getContentPane().add(canvas);// 将画布添加到窗体容器默认布局的中部位置
    }
    /**
     * 启动程序
     */
    public static void main(String[] args) {
        DrawPictureFrame frame = new DrawPictureFrame();
        frame.setVisible(true);
    }
}

四、添加鼠标画笔功能

下面的代码就是在DrawPictureFrame类已有代码的基础上,添加了鼠标监听功能,以便在拖动鼠标时,能够在窗体上绘制线条。

/**
 * 画图主窗体。
 */
public class DrawPictureFrame extends JFrame {// 继承窗体类
/*此处省略相同代码*/
    
    int x = -1, y = -1;// 上一次鼠标绘制点的横、纵坐标
    boolean rubber = false;// 橡皮标识变量
    boolean drawShape = false;// 画图形标识变量
    /**
     * 构造方法。
     */
    public DrawPictureFrame() {
/*此处省略相同代码*/
        init();// 组件初始化
        addListener();// 添加组件监听
    }
​
    /**
     * 为组件添加动作监听
     */
    private void addListener() {
        // 画板添加鼠标移动事件监听
        canvas.addMouseMotionListener(new MouseMotionListener() {
            @Override
            public void mouseDragged(final MouseEvent e) {// 当鼠标拖拽时
                if (x > 0 && y > 0) {// 如果X和Y存在·鼠标记录
                    if (rubber) {// 如果橡皮标识为true,表示使用橡皮
                        g.setColor(bacgroundColor);
                        g.fillRect(x, y, 10, 10);// 在鼠标滑过的位置画填充的正方形
                    } else {// 如果橡皮标识为false,表示用画笔画图
                        g.drawLine(x, y, e.getX(), e.getY());// 在鼠标滑过的位置画直线
                    }
                }
                x = e.getX();
                y = e.getY();
                canvas.repaint();// 更新画布
            }
        canvas.addMouseListener(new MouseAdapter() {
                // 当按键松开时
                @Override
                public void mouseReleased (MouseEvent e){
                    // 将记录上一次鼠标绘制点的横纵坐标恢复成-1
                    x = -1;
                    y = -1;
                }
            }
        }
    /**
     * 组件初始化
     */
    private void init() {
/*此处省略相同代码*/
    }
    /**
     * 启动程序
     */
    public static void main(String[] args) {
/*此处省略相同代码*/
    }
}

补充完这些代码之后,再运行main方法,就可以使用鼠标在空白区域画画了。

五、添加工具栏

1.添加工具栏组件

下面的代码就是在DrawPictureFrame类已有代码的基础上,添加以下代码:

/**
 * 画图主窗体。
 */
public class DrawPictureFrame extends JFrame {// 继承窗体类
/*此处省略未发生变化的代码*/
    boolean drawShape = false;// 画图形标识变量
​
    private JToolBar toolBar;// 工具栏
    private JButton eraserButton;// 橡皮按钮
    private JToggleButton strokeButton1;// 细线按钮
    private JToggleButton strokeButton2;// 粗线按钮
    private JToggleButton strokeButton3;// 较粗按钮
    private JButton backgroundButton;// 背景色按钮
    priva
  • 19
    点赞
  • 90
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Waylon1024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值