课程设计JAVA画板模拟画图工具
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
1 课题介绍 (1)
1.1 课程设计目的 (1)
1.2 课程设计要求 (1)
1.3 课程设计主要知识点 (1)
2 总体设计 (2)
2.1 画板界面设计图 (2)
2.2 模块概述 (2)
2.2.1 文件操作 (2)
2.2.2 图形绘制 (2)
3 详细设计与实现 (4)
3.1 框架类DrawGraphic (4)
3.1.1菜单 (4)
3.1.2工具栏 (6)
3.1.3画图区域 (7)
3.2 基本图形类 (10)
3.2.1 父类Drawings (10)
3.2.2 子类(只列出部分) (10)
4 设计中的难点 (12)
4.1多态与动态绑定 (12)
4.2重绘的理解 (12)
4.3文件的新建、打开和保存 (12)
5 运行测试 (13)
6 总结 (15)
参考文献 (16)
1 课题介绍
1.1 课程设计目的
课程设计题目:模拟画图
要求设计一个程序,模拟Windows中的画图程序,实现图形图像的编辑,修改,保存等功能。
1.2 课程设计要求
(1)程序中必须包括“新建”、“打开”、“保存”,用户可以选择,实现对文件的操作;
(2)画图板的绘图按钮用来画出不同的图形,包括实心图形和空心的图形;
(3)可以对线条的颜色和粗细进行设置,也可以对填充图形的颜色进行设置和更改。
1.3 课程设计主要知识点
(1)框架类DrawGraphic继承了Swing类库中JFrame,并且用到JButton,JLabel,JPanel,等Swing类库中的组件进行窗体设计;
(2)选择一个文件,用到组件JFileChooser;
(3)选择颜色,用到组件JColorChooser;
(4)弹出标准对话框,用到组件JOptionPane;
(5)在单击绘图按钮时,所触发的动作通过方法addActionListener和ActionListener接口的actionPerformed方法共同实现;
(6)MouseAdapter和MouseMotionAdapter用来完成鼠标各种事件的相应操作,包括单击、移动、拖拽等;
(7)在界面设计的时候结合BorderLayout和GridLayout两种布局格式;
(8)在添加监听器的时候有用到内部匿名类和内部类,所以要熟悉它们的构造方法和使用方法,从中体会持有对方引用的这一设计思想。
(9)在图形绘制的时候,用到Graphics类,其揭示了所有图形系统几乎都采用的一种机制,就是如何在窗口上画出一些图形来,当窗口构造出来的时候里面有一支画笔,即Graphics的一个对象,当窗口调用paint方法的时候,系统会把画笔自动传递给它,拿到画笔,重写paint方法就实现了在窗口上绘制基本图形。
2 总体设计
2.1 画板界面设计图
定义框架类DrawGraphic,然后在框架上直接添加菜单栏,整个框架采用BorderLayout的布局格式。工具栏、显示鼠标位置的标签、主要的画图区域分别在框架的west,south,center三块区域。而浮动式工具栏采用的是GridLayout 布局格式,其初始方向设定为VERTICAL,如下图所示:
2.2 模块概述
2.2.1 文件操作
文件的新建,打开,保存可以添加内部匿名类的方式实现,new一个事件监听器ActionListener,里面调用actionPerformed的方法,被监听的按钮一旦被触发就调用函数执行相应的操作。
2.2.2 图形绘制
在工具栏里面实现了基本图形的绘制,图形属性的设置,如画笔粗细和画笔颜色的设置,以及橡皮擦,文字输入等功能,而这些功能的实现都是通过添加内
部事件监听器类来实现的。一个类用来监听绘制基本图形以及橡皮擦按钮;另一个类用来监听的是选择颜色按钮、选择画笔粗细按钮、和输入文字按钮,里面都用if语句和e.getSource来判断事件源,从而在触发时,调用不同的函数,当事件源为输入文字时,用JOptionPane.showMessageDialog来弹出一个提示操作的对话框。
画图区域的功能主要是通过添加鼠标监听器来实现的:
一个鼠标监听器监听的是:单击鼠标,释放鼠标,鼠标进入绘图区域,鼠标离开绘图区域这四个鼠标的动作事件;
另一个监听的是:鼠标拖拽和鼠标移动。而且,两个监听器之间是存在着密不可分的关系的,它们同时监听画图区域。
铅笔作画和橡皮擦的使用是画图板设计的核心也是难点,而且两者的实现原理是一样的,我们通常画图的时候,一定是先单击鼠标然后拖拽鼠标最后释放鼠标的,所以,在画图的过程中,只要鼠标单击一下就获得(x1,y1),紧接着用if语句判断画的基本图形是哪一个,如果是铅笔或者橡皮擦,则获得(x2,y2),说明在铅笔或橡皮擦的时候,鼠标单击一下,就获得一个点,x1=x2,y1=y2,且这个点的坐标就是鼠标单击的位置,而且这个点是算作第一个基本图形的,此时index=1;拖拽的过程中动态获得鼠标所在位置的横纵坐标且始终x1=x2,y1=y2,并且等于第一个基本图形也就是index=1的那个点的x2,y2,即,在铅笔作画的过程中,在鼠标不断拖拽的过程中,index=1时的那个点在以点的点的长度不断增加,这就是铅笔作画过程的实现;鼠标释放的时候,在铅笔或橡皮的状态下,也是得到一个点。所以,可以总结,铅笔和橡皮都是通过设置画直线方法中的点的坐标相等来实现的。其它图形的绘制,可以直接调用Graphics2D中的方法实现,相对比较简单。