ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2021-06-08 09:59:01  阅读:197  来源: 互联网

标签:课程设计 迷你版 java awt new import 源代码 public Math


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

文章目录


引言


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


在这里插入图片描述


系统功能结构


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

在这里插入图片描述

模块功能代码


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

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,awt,new,import,源代码,public,Math
来源: https://blog.csdn.net/chenlixiao007/article/details/117396089

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有