大一 Java 课程设计实践 - 迷你版画图板(附源代码和设计文档)
我是陈皮,一个在互联网 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 课程设计实践 - 迷你版画图板(附源代码和设计文档)相关推荐
- java开发五年多少钱,附超全教程文档
一.分布式架构学习路线图 据统计,人的阅读时间在20分钟以内是能够达到全身心投入的,顾文章单张篇幅以后会尽量缩短,但更新会尽量相应频繁一些. 二.计算机软件发展历史 首先我们了解下计算机软件的发展历史 ...
- ## 大一java课程设计_航班查询系统(我是小白)
大一java课程设计_航班查询系统(我是小白) 备注:第一个java程序有借鉴别人的成分,因为忘了在哪个大佬上面借鉴的,所以在此备注,如有侵权,请联系删除,(仅用于学习使用,并未想盈利) 框体介绍 一 ...
- java计算机毕业设计课外创新实践学分认定管理系统源码+数据库+lw文档+系统
java计算机毕业设计课外创新实践学分认定管理系统源码+数据库+lw文档+系统 java计算机毕业设计课外创新实践学分认定管理系统源码+数据库+lw文档+系统 本源码技术栈: 项目架构:B/S架构 开 ...
- java计算机毕业设计VUE教育网站设计与实现源码+mysql数据库+系统+lw文档+部署
java计算机毕业设计VUE教育网站设计与实现源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计VUE教育网站设计与实现源码+mysql数据库+系统+lw文档+部署 本源码技术栈: ...
- 基于java的创意项目众筹平台的设计与开发计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
基于java的创意项目众筹平台的设计与开发计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 基于java的创意项目众筹平台的设计与开发计算机毕业设计源码+系统+lw文档+mysql数据库 ...
- 基于JAVA图书借阅系统的设计与实现计算机毕业设计源码+系统+lw文档+部署
基于JAVA图书借阅系统的设计与实现计算机毕业设计源码+系统+lw文档+部署 基于JAVA图书借阅系统的设计与实现计算机毕业设计源码+系统+lw文档+部署 本源码技术栈: 项目架构:B/S架构 开发语 ...
- java计算机毕业设计H5女娲宫旅游网站设计与实现源码+mysql数据库+系统+lw文档+部署
java计算机毕业设计H5女娲宫旅游网站设计与实现源码+mysql数据库+系统+lw文档+部署 本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 开发软件:idea eclipse 前端技 ...
- 计算机毕业设计Java企业员工考勤系统的设计与实现(源码+系统+mysql数据库+lw文档)
计算机毕业设计Java企业员工考勤系统的设计与实现(源码+系统+mysql数据库+lw文档) 计算机毕业设计Java企业员工考勤系统的设计与实现(源码+系统+mysql数据库+lw文档) 本源码技术栈 ...
- java计算机毕业设计web智慧医疗平台设计与实现源码+mysql数据库+系统+lw文档+部署
java计算机毕业设计web智慧医疗平台设计与实现源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计web智慧医疗平台设计与实现源码+mysql数据库+系统+lw文档+部署 本源码技 ...
最新文章
- l5如何通过路由走api版本回退查找设置
- Kaggle金牌拿Offer有多简单?
- 新的MOVE结构,和在项目中实际的感受
- 2018.3.30 边框应用与导航栏设置
- android 5.0 sd卡读写,如何使用为Android 5.0(Lollipop)提供的新SD卡存取API?
- Flask 中的数据库迁移
- c++interesting转换为uint_巴西插头标准,旅行转换插头是怎样的?
- 怎么学计算机制作ppt,电脑ppt怎么做
- 静态路由的配置(以华为eNSP为例)
- 近世代数:置换群、陪集指数和Lagrange定理
- 《UnityAPI.Camera摄像机》(Yanlz+Unity+SteamVR+云技术+5G+AI+VR云游戏+allCameras+cullingMask+OnPreCull+立钻哥哥++OK+)
- 反汇编基础:winRar去除广告
- VBA编程图表(二十一)
- 朋友就像人民币 ,有真有假
- airpods二代降噪吗_华强北 苹果二代三代 蓝牙耳机airpods。不跳电,真降噪。
- 安卓和ios的app测试有什么区别?
- 3万字干货HTML+CSS入门指南(建议收藏)
- RGB颜色详细标号 用彩虹色装饰CSDN告示栏 - 酷炫
- LZH_IJKPlayer-一个最简单使用的视频播放器,集成于bilibili开源直播播放器(ijkplayer)
- 欧姆龙OMRON Sysmac Studio工程怎么删除用户程序执行ID
热门文章
- 解决GitHub打不开(FastGithub,支持MAC)
- 【arduino数码管实验】疫情期间宅着没事做?这个东西可以了解一下......
- 一文总结旋转目标检测全面综述:论文方法与代码
- swif之Tableview的使用、cell动态高度、侧滑删除、设置中心、个人中心、cell多选、cell单选
- 用友财务软件常见问题维护
- IT行业比较吃香的技能有哪些?
- 音视频,我来了,入坑
- 详解修改docker镜像源加速下载(解决下载apollo修改docker源后下载速度仍然十分慢问题)
- docker部署 单机版nacos
- 控温设备的PID参数选定的个人方法(真实有效)