我是陈皮,一个在互联网 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 {@Overridevoid 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 {@Overridevoid 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.0fprivate 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 + FfileMenu.setMnemonic('F');// 新建文件菜单项JMenuItem newItem = new JMenuItem("New         Alt+N");// 快捷键 Alt + NnewItem.setMnemonic('N');// 监听事件newItem.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// 事件被触发,则调用新建文件方法newFile();}});// 添加到文件菜单项中fileMenu.add(newItem);// 添加分隔符fileMenu.addSeparator();// 保存文件菜单项JMenuItem saveItem = new JMenuItem("Save         Alt+S");saveItem.setMnemonic('S');saveItem.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// 事件被触发,则调用保存文件方法saveFile();}});fileMenu.add(saveItem);fileMenu.addSeparator();// 打开文件菜单项JMenuItem loadItem = new JMenuItem("Load         Alt+L");loadItem.setMnemonic('L');loadItem.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// 事件被触发,则调用打开文件方法loadFile();}});fileMenu.add(loadItem);fileMenu.addSeparator();// 方便观看,不占用太多空间,中间省略一些代码// 方便观看,不占用太多空间,中间省略一些代码// 方便观看,不占用太多空间,中间省略一些代码// show();setVisible(true);}

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

choices[0].addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {newFile();}
});choices[1].addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {loadFile();}
});choices[2].addActionListener(new ActionListener() {@Overridepublic 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() {@Overridepublic void windowClosing(WindowEvent e) {System.exit(0);}});}
}

如何获取和运行程序


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

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

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

  1. java开发五年多少钱,附超全教程文档

    一.分布式架构学习路线图 据统计,人的阅读时间在20分钟以内是能够达到全身心投入的,顾文章单张篇幅以后会尽量缩短,但更新会尽量相应频繁一些. 二.计算机软件发展历史 首先我们了解下计算机软件的发展历史 ...

  2. ## 大一java课程设计_航班查询系统(我是小白)

    大一java课程设计_航班查询系统(我是小白) 备注:第一个java程序有借鉴别人的成分,因为忘了在哪个大佬上面借鉴的,所以在此备注,如有侵权,请联系删除,(仅用于学习使用,并未想盈利) 框体介绍 一 ...

  3. java计算机毕业设计课外创新实践学分认定管理系统源码+数据库+lw文档+系统

    java计算机毕业设计课外创新实践学分认定管理系统源码+数据库+lw文档+系统 java计算机毕业设计课外创新实践学分认定管理系统源码+数据库+lw文档+系统 本源码技术栈: 项目架构:B/S架构 开 ...

  4. java计算机毕业设计VUE教育网站设计与实现源码+mysql数据库+系统+lw文档+部署

    java计算机毕业设计VUE教育网站设计与实现源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计VUE教育网站设计与实现源码+mysql数据库+系统+lw文档+部署 本源码技术栈: ...

  5. 基于java的创意项目众筹平台的设计与开发计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署

    基于java的创意项目众筹平台的设计与开发计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 基于java的创意项目众筹平台的设计与开发计算机毕业设计源码+系统+lw文档+mysql数据库 ...

  6. 基于JAVA图书借阅系统的设计与实现计算机毕业设计源码+系统+lw文档+部署

    基于JAVA图书借阅系统的设计与实现计算机毕业设计源码+系统+lw文档+部署 基于JAVA图书借阅系统的设计与实现计算机毕业设计源码+系统+lw文档+部署 本源码技术栈: 项目架构:B/S架构 开发语 ...

  7. java计算机毕业设计H5女娲宫旅游网站设计与实现源码+mysql数据库+系统+lw文档+部署

    java计算机毕业设计H5女娲宫旅游网站设计与实现源码+mysql数据库+系统+lw文档+部署 本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 开发软件:idea eclipse 前端技 ...

  8. 计算机毕业设计Java企业员工考勤系统的设计与实现(源码+系统+mysql数据库+lw文档)

    计算机毕业设计Java企业员工考勤系统的设计与实现(源码+系统+mysql数据库+lw文档) 计算机毕业设计Java企业员工考勤系统的设计与实现(源码+系统+mysql数据库+lw文档) 本源码技术栈 ...

  9. java计算机毕业设计web智慧医疗平台设计与实现源码+mysql数据库+系统+lw文档+部署

    java计算机毕业设计web智慧医疗平台设计与实现源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计web智慧医疗平台设计与实现源码+mysql数据库+系统+lw文档+部署 本源码技 ...

最新文章

  1. l5如何通过路由走api版本回退查找设置
  2. Kaggle金牌拿Offer有多简单?
  3. 新的MOVE结构,和在项目中实际的感受
  4. 2018.3.30 边框应用与导航栏设置
  5. android 5.0 sd卡读写,如何使用为Android 5.0(Lollipop)提供的新SD卡存取API?
  6. Flask 中的数据库迁移
  7. c++interesting转换为uint_巴西插头标准,旅行转换插头是怎样的?
  8. 怎么学计算机制作ppt,电脑ppt怎么做
  9. 静态路由的配置(以华为eNSP为例)
  10. 近世代数:置换群、陪集指数和Lagrange定理
  11. 《UnityAPI.Camera摄像机》(Yanlz+Unity+SteamVR+云技术+5G+AI+VR云游戏+allCameras+cullingMask+OnPreCull+立钻哥哥++OK+)
  12. 反汇编基础:winRar去除广告
  13. VBA编程图表(二十一)
  14. 朋友就像人民币 ,有真有假
  15. airpods二代降噪吗_华强北 苹果二代三代 蓝牙耳机airpods。不跳电,真降噪。
  16. 安卓和ios的app测试有什么区别?
  17. 3万字干货HTML+CSS入门指南(建议收藏)
  18. RGB颜色详细标号 用彩虹色装饰CSDN告示栏 - 酷炫
  19. LZH_IJKPlayer-一个最简单使用的视频播放器,集成于bilibili开源直播播放器(ijkplayer)
  20. 欧姆龙OMRON Sysmac Studio工程怎么删除用户程序执行ID

热门文章

  1. 解决GitHub打不开(FastGithub,支持MAC)
  2. 【arduino数码管实验】疫情期间宅着没事做?这个东西可以了解一下......
  3. 一文总结旋转目标检测全面综述:论文方法与代码
  4. swif之Tableview的使用、cell动态高度、侧滑删除、设置中心、个人中心、cell多选、cell单选
  5. 用友财务软件常见问题维护
  6. IT行业比较吃香的技能有哪些?
  7. 音视频,我来了,入坑
  8. 详解修改docker镜像源加速下载(解决下载apollo修改docker源后下载速度仍然十分慢问题)
  9. docker部署 单机版nacos
  10. 控温设备的PID参数选定的个人方法(真实有效)