大一 Java 课程设计实践 - 迷你版画图板(附源代码和设计文档)

我是陈皮,一个在互联网 Coding 的 ITer,微信搜索「陈皮的JavaLib」第一时间阅读最新文章,回复【资料】,即可获得我精心整理的技术资料,电子书籍,一线大厂面试资料和优秀简历模板。

文章目录


引言


在大学期间,选修了一门 Java 语言课程,期末课程设计开发了一个迷你版画图板,并且拿到了优秀的成绩。在此分享下如何开发这个迷你版画图版,Java 基础知识可以的同学,可以在一小时内开发完成喔!如果想要完整版可运行源代码,以及课程设计报告,可以关注我公众号联系我(看文章顶部开头介绍),可以免费领取。欢迎大家点赞收藏!


大一 Java 课程设计实践 - 迷你版画图板(附源代码和设计文档)


系统功能结构


本程序完成的是一个类似于 Windows 画图板的软件,并不是专业开发和设计的绘图软件。此软件是运行在 Windows 环境下的,整体功能结构图如下:

大一 Java 课程设计实践 - 迷你版画图板(附源代码和设计文档)

模块功能代码


首先需要定义图纸基础类,其他类实现此类重写绘画方法,例如圆形,实心圆形,椭圆形,矩形等类需要实现这个基类。

package com.nobody;

import java.awt.Graphics2D;
import java.io.Serializable;

/**
 * @Description 图纸类,其他类实现此类重写绘画方法
 * @Author Mr.nobody
 * @Date 2021/5/30
 * @Version 1.0
 */
public class Drawings implements Serializable {

    // 定义色彩属性
    int R, G, B;

    // 定义字体属性
    int type;

    // 定义线条粗细属性
    float stroke;

    // 定义字体风格属性
    String s1, s2;

    // 定义坐标属性
    int x1, y1;
    int x2, y2;

    void draw(Graphics2D g) {}; // 定义绘图方法
}

然后定义系统预设的图形类,继承上面的基础类,重写 draw 方法,实现画出特定的图形。以下简单举例其中的两个,演示代码如下:

package com.nobody;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics2D;

/**
 * @Description 圆类
 * @Author Mr.nobody
 * @Date 2021/5/30
 * @Version 1.0
 */
public class Circle extends Drawings {

    @Override
    void draw(Graphics2D g) {
        g.setPaint(new Color(R, G, B));
        g.setStroke(new BasicStroke(stroke));
        g.drawOval(Math.min(x1, x2), Math.min(y1, y2),
                Math.max(Math.abs(x1 - x2), Math.abs(y1 - y2)),
                Math.max(Math.abs(x1 - x2), Math.abs(y1 - y2)));
    }
}
package com.nobody;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics2D;

/**
 * @Description 实心矩形类
 * @Author Mr.nobody
 * @Date 2021/5/30
 * @Version 1.0
 */
public class FillRect extends Drawings {
    @Override
    void draw(Graphics2D g) {
        g.setPaint(new Color(R, G, B));
        g.setStroke(new BasicStroke(stroke));
        g.fillRect(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x1 - x2), Math.abs(y1 - y2));
    }
}

画板主类,就是整个画板容器,其他组件都会添加到这个画板类中,共同组装一个完整的画板。首先需要在类中定义一些代表整个画板的基础信息,如下:

package com.nobody;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import javax.swing.*;
import java.io.*;

/**
 * @Description 画板主类
 * @Author Mr.nobody
 * @Date 2021/5/30
 * @Version 1.0
 */
public class MiniDrawPad extends JFrame {

    // 按钮数组,存放上面名称的功能按钮
    private JButton[] choices;

    // 全部字体定义
    private String[] styleNames = {"微软雅黑", "华文中宋", "黑体", "宋体", "隶书", "华文彩云", "仿宋_GB2312", "华文行楷",
            "方正舒体", "新宋体", "幼圆", "Times New Roman", "Arial", "Serif", "Monospaced", "SonsSerif",
            "Garamond", "Courier New", "Chiller", "Edwardian Script ITC", "Chaparral Pro Light"};

    // 按钮面板定义
    JToolBar buttonPanel;

    // 显示鼠标状态的提示条
    private JLabel statusBar;

    // 画图区域
    private DrawPanel drawingArea;

    // 画图区域的初始宽高
    private static final int WIDTH = 1200, HEIGHT = 800;

    // 用来存放基本图形的数组
    Drawings[] itemList = new Drawings[4000];

    int index = 0; // 当前已经绘制的图形数目

    // 设置默认画图状态为随笔画
    private int currentChoice = 3;
    // 初始化画笔颜色为黑色
    private Color color = Color.black;

    // 用来存放当前色彩值
    int R, G, B;

    // 用来存放当前字体风格
    int f1, f2;

    // 用来存放当前字体
    String style1;

    // 设置画笔粗细,默认值为1.0f
    private float stroke = 1.0f;

    // 定义字体风格选择框 bold为粗体,italic为斜体,二者可以同时使用
    JCheckBox bold, italic;

    // 字体按钮组件
    JComboBox styles;
    
	// 省略其他方法定义
}

在画板类的构造方法中,对整个基础信息进行初始化赋值,例如设置按钮排榜,按钮显示图标,显示文字,设置按钮监听器等。

/**
     * 构造方法
     */
    public MiniDrawPad() {

        // 设置画图板标题
        super(" Mini Drawing Pad");

        // 定义菜单条
        JMenuBar bar = new JMenuBar();

        // 文件菜单项
        JMenu fileMenu = new JMenu("File(F)");
        // 快捷键 Alt + F
        fileMenu.setMnemonic('F');

        // 新建文件菜单项
        JMenuItem newItem = new JMenuItem("New         Alt+N");
        // 快捷键 Alt + N
        newItem.setMnemonic('N');
        // 监听事件
        newItem.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 事件被触发,则调用新建文件方法
                newFile();
            }
        });
        // 添加到文件菜单项中
        fileMenu.add(newItem);
        // 添加分隔符
        fileMenu.addSeparator();

        // 保存文件菜单项
        JMenuItem saveItem = new JMenuItem("Save         Alt+S");
        saveItem.setMnemonic('S');
        saveItem.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 事件被触发,则调用保存文件方法
                saveFile();
            }
        });
        fileMenu.add(saveItem);
        fileMenu.addSeparator();

        // 打开文件菜单项
        JMenuItem loadItem = new JMenuItem("Load         Alt+L");
        loadItem.setMnemonic('L');
        loadItem.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 事件被触发,则调用打开文件方法
                loadFile();
            }
        });
        fileMenu.add(loadItem);
        fileMenu.addSeparator();

        // 方便观看,不占用太多空间,中间省略一些代码
        // 方便观看,不占用太多空间,中间省略一些代码
        // 方便观看,不占用太多空间,中间省略一些代码

        // show();
        setVisible(true);
    }

监听器方法,会监听不同事件,如果事件触发了,会调用具体的方法,进行画图,其中几个监听器代码如下:

choices[0].addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        newFile();
    }
});

choices[1].addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        loadFile();
    }
});

choices[2].addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        saveFile();
    }
});

最后是启动类,是整个程序运行的入口,直接运行 main 方法,即可启动程序。

package com.nobody;

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.UIManager;

/**
 * @Description 软件入口类
 * @Author Mr.nobody
 * @Date 2021/5/30
 * @Version 1.0
 */
public class Main {

    /**
     * main 方法,程序入口
     *
     * @param args 主函数参数
     */
    public static void main(String[] args) {
        try {
            // 将画板界面设置为当前系统(Windows)风格,这样更加美观
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (Exception e) {
            System.err.println("设置画板界面风格失败!");
        }

        // 创建画板
        MiniDrawPad miniDrawPad = new MiniDrawPad();

        // 添加窗口事件,关闭窗口时退出程序
        miniDrawPad.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
}

如何获取和运行程序


首先需要安装 JDK1.8 以上版本,程序可以直接在 Eclipse 或者 IntelliJ IDEA 打开运行。

以下是程序代码结构,完整项目和说明文档,关注我公众号【陈皮的JavaLib】,联系我,可以免费领取!如果有不懂的地方,也是可以咨询我,我也会帮助解答你们遇到的问题。

大一 Java 课程设计实践 - 迷你版画图板(附源代码和设计文档)


大一 Java 课程设计实践 - 迷你版画图板(附源代码和设计文档)

上一篇:Java简单的计算器编程


下一篇:窗口监听事件