我是陈皮,一个在互联网 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】,联系我,可以免费领取!如果有不懂的地方,也是可以咨询我,我也会帮助解答你们遇到的问题。