滨江学院
软件工程课程设计报告
( 2013 -- 2014 年度第 1学期)
课程名称: 软件工程课程设计 题 目: Windows绘图板的设计与实现 专 业: 计算接科学与技术 班 级: 计科1班 学 号: 20112308021 姓 名: 王昊 指导教师: 李振宏 设计周数: 两周
日期:2013 年 11 月 20 日
1
Windows绘图系统的设计与实现
目录
绪论·········································································3 摘要·········································································3 一、课程设计目的与要求·······················································3 二、设计正文·································································4
1、概述··································································4
1.1 课题题目····························································4 1.2 系统主要目标·························································4 1.3 系统的开发坏境及运行环境··············································4 2、系统需求分析··························································4
2.1 绘图板的功能分析·····························································4 2.2 用户界面需求和界面分析·······················································4
3、Windows绘图板软件概要设计···········································6
3.1 设计准备·····································································6 3.2 Windows绘图板软件总体设计思想················································7
3.3总体设计流程图································································8
4、Windows绘图板软件详细设计············································9
4.1各功能实现····································································9 4.2绘制基本图形··································································9 4.3设置工具属性··································································9 4.4编辑颜色······································································10
5、程序测试······························································11
5.1主界面········································································11 5.2文件菜单界面··································································11 5.3 Edit菜单界面··································································13 5.4 Help界面······································································13
三、课程设计总结或结论·······················································14 四、参考文献·································································14
2
Windows绘图系统的设计与实现
绪论
计算机已经成为我们学习和工作的得力助手:今天,计算机的价格已经十分低廉,性能却有了长足的进步。它已经被应用于许多领域,计算机之所以如此流行的原因主要有以下几个方面:
首先,计算机可以代替人工进行许多繁杂的劳动; 其次,计算机可以节省许多资源;
第三,计算机可以大大的提高人们的工作效率; 第四,计算机可以使敏感文档更加安全,等等。
既然计算机有这么多优点。所以我就梦想着能用我的双手和智慧让计算机能听我的使唤,计算机我认为最成熟的程序就是Windows了。所以我就模仿Windows的画图板,自己做了一个画图板。也有一部分成分是为了完成学校的课题任务,但我也是很愉快的作了这个课题。
用java做Windows 的画图板确实有一些难做。因为有很多编程语言都有比java好的多的界面设计功能。如:VB,C#等。他们都是微软公司设计的语言有很好的界面设计功能。并且C# 也有java所拥有的类库功能。我在这并不是说java不好,只是说明java在做界面程序时。并不占优势。特别是做Windows 的软件。
摘要:
Windows画图板系统的开发最主要包括前端应用程序的开发。对前端应用程序的开发要求应用程序功能完备,易使用,界面美观等特点。
Windows画图板系统主要实现文件的新建,保存,颜色的编辑,在坐标系中画直线、矩形、椭圆、圆形、三角等。图形界面各个按钮如“橡皮”、“铅笔”、“刷子”、“A”、“直线”等的实现。该系统还能调整画笔的大小,橡皮的大小,颜色是否填充,编辑各种颜色的实现。
我们采用Java语言设计编程该系统。 关键词:Windows绘图板 Java、
一、 课程设计的目的与要求
目的:采用面向对象编程技术,设计并实现一个功能完善的Windows绘图板程序。通过实际程序的开发,熟练面向对象程序设计方法,掌握桌面程序设计技巧,熟悉.NET或Java开发环境。 任务:
1. 开发一个功能完善的Windows绘图板程序,功能包括:新建空白文档、文件保存、绘制一些基
本的图形组件(直线、矩形、实心矩形、椭圆、实心椭圆、圆、实心圆、圆角矩形、实心圆角矩形等)、橡皮擦、添加文字等; 2. 完成软件开发文档编写;
3
Windows绘图系统的设计与实现
3. 给出程序运行、测试的详细结果。
4. 进一步加强和提高软件工程文档的编写能力; 5. 培养协作能力和团队精神。
二、设计正文
1.概述
1.1课题题目:Windows绘图板的设计与实现 1.2系统的主要目标:
本系统目标是实现Windows绘图板软件功能概述
(1)新建空白文档; (2)文件保存;
(3)绘制一些基本的图形组件(直线、矩形、实心矩形、椭圆、实心椭圆、圆、实心圆、圆
角矩形、实心圆角矩形等)、橡皮擦、添加文字等;
1.3 系统的开发环境及运行环境:
操作系统: Windows XP Pro SP2 建模工具: Rational Rose 2003 数据库系统:SQL Server2005
开发工具: Visual Studio 2005 Eclipse 3.0 Web服务器:IIS+ASP.NET 2.0平台
2.系统需求分析
2.1绘图板的功能分析:
该系统所要实现的功能如下:
(1)“橡皮”的功能:用来画出的图形。 (2)“铅笔”的功能:用来画出的任意直线。
(3)“直线”的功能:用来让用户更好的画出的直线。 (4)“字体”的功能:用来让用户写出自己的字体。 (5)“多边形”的功能:用来让用户更好的画出的多边形。 (6)“椭圆”的功能:用来让用户更好的画出的椭圆。
(7)“圆角矩形”、“矩形”、“选择颜色”等功能:用来让用户更好的实用该绘图板功能。
2.2用户界面需求和性能分析:
Windows绘图板主要是为用户提供基本画图工具。所以以提供用户最需要的功能为目的。 设计性能如下:
让用户不管怎样操作都能得到用户的目的,争取做到傻瓜都能使用该软件。
较windows绘图板增加了生成函数图象的功能,能实现绘制一些基本的图形组件(直线、矩形、实心矩形、椭圆、实心椭圆、圆、实心圆、圆角矩形、实心圆角矩形等)、橡皮擦、添加文字等。
其他的实现了windows绘图板的大部分功能:铅笔、橡皮、刷子、直线、选择颜色等等功能。
4
Windows绘图系统的设计与实现
用例图
用例图说明:
(1)系统的外部角色有:paintings。 (2)系统主要用例的文档描述:
painting可见的功能,包含了pencil、word、circle、fillcircle、painting、rubber、filloval、filloval、fillrect、oval、line、reck。
类图
5
Windows绘图系统的设计与实现
类图说明:
1.工具接口Tool:
从图中可以看到,工具接口Tool 定义了鼠标动作的四个方法,分别是拖动mouseDrapped()、移动mouseMoved()、松开mouseReleased()、按下mousePressed()、点击mouseClicked()五个动作,并用String 类型的常量属性来定义工具的类型。这个接口只有一个实现类AbstractTool,而每个工具类 都是去扩展AbstractTool 类,在图中表现为Tool1、Tool2…….ToolN。 2.Tool的实现类AbstractTool
AbstractTool 是Tool 的实现类,也是一个抽像类,所以并不能被创建,只能被继承。此类实现Tool 中定义的所有方法,并扩展了其它方法,让其子类继承或者重写。该类中为其他的工具类提供了大部分的实现,那么它的子类就可以不必再做重复的实现,只关心与本类相关的逻辑, 3.AbstractTool的子类
AbstractTool 一共有ArrowTool(箭头)、PencilTool(铅笔)、BrushTool(刷子)、EraserTool(橡皮擦)、LineTool (直线)、RectTool (矩形)、PolygonTool (多边形)、RoundTool (椭圆形)、RoundRectTool(圆矩形)、AtomizerTool(喷墨)、ColorPickedTool(颜色选择)11 个子类, 4. 界面类ImageFrame
这个画图工具的界面的主要放在这个类中实现 5. 业务逻辑类ImageService
除鼠标的画图功能外(画图功能由Tool 的实现类完成),初始化画板、图片的新建打开与保存、各种面板的显示与隐藏、颜色的编辑、整个界面的刷新、菜单等业务逻辑都放在这个类中实现, 对象,它并没有保存一些状态属性。 6 .文件选择类ImageFileChooser
ImageFileChooser 类继承了JFleChooser 类,JFleChooser 是Java 提供的一个简单的文件选择机制,我们这里扩展这个类,是为了增加我们自己的文件过滤器。
3.Windows绘图板软件概要设计
3.1 设计准备
(1)此程序为实现这些功能模块,必须首先定义一个工具面板,将这些画笔、画箭头、椭圆、圆、多
边形直线、画矩形、画笔颜色、画笔大小、橡皮等功能组件放入这个工具面板中。
(2)此程序为实现利用鼠标做画笔的功能,必会产生鼠标事件MouseEvent。因此,为实现鼠标画图的
功能,必须用到鼠标触发事件,故在此程序中,必须实现“委托事件模型”,用到事件源、事件对象以及监听者对象。
(3)此程序中,必须用到的包如下:
import java.awt.*;
import java.awt.geom.*; import java.awt.event.*; import javax.swing.*; import java.io.*; import java.util.*; (4)需用到的类 class DrawPad
这个类是主类,是程序得以运行的入口。在这个主类中定义了主方法,是该程序执行的入口。 class SimpleDrawPad
此类用于实现这个程序的大部分功能,在这个类中除了定义一些基本变量以及构造函数外,还定义了很多成员方法,这些成员方法将实现鼠标触发事件的一系列绘图功能。 class ButtonDealer(SimpleDrawPad内部类)
按钮侦听器ButtonDealer类,内部类,用来侦听基本按钮的操作。 class ButtonDealer1(SimpleDrawPad内部类)
6
Windows绘图系统的设计与实现
按钮侦听器ButtonDealer1类,用来侦听颜色选择、画笔粗细设置、文字输入按钮的操作。 class mouseA(SimpleDrawPad内部类)
鼠标事件mouseA类,继承了MouseAdapter,用来完成鼠标相应事件操作。 class mouseB(SimpleDrawPad内部类)
鼠标事件mouseB类继承了MouseMotionAdapter,用来完成鼠标拖动和鼠标移动时的相应操作。 class checkBoxHandler(SimpleDrawPad内部类)
选择字体风格时候用到的事件侦听器类,加入到字体风格的选择框中 class DrawPanel(SimpleDrawPad内部类) 画图面板类,用来画图。 class drawings
定义画图的基本图形单元。 class Line
继承class drawings 实现画直线功能。 class Rect
继承class drawings 实现画矩形功能。 class fillRect
继承class drawings 实现画实心矩形功能。 class Oval
继承class drawings 实现画椭圆功能。 class fillOval
继承class drawings 实现画实心椭圆功能。 class Circle
继承 class drawings 实现画圆功能。 class fillCircle
继承 class drawings 实现画实心圆功能。 class Pencil
继承 class drawings 实现自定义绘画功能。 class Rubber
继承 class drawings 实现清除图案功能。 class word
继承 class drawings 实现输入文字功能。
3.2Windows绘图板软件总体设计思想
主窗体的设计:主类(painter)用来生成主界面,完成画图板的主要框架。主类由JFrame派生出来。主界面由菜单栏、工具栏和画图区域三部分组成,布局格式采用BorderLayout布局形式。
菜单栏的设计。菜单栏包括文件菜单栏、颜色菜单栏、线条粗细菜单栏和提示菜单栏。其中文件菜单栏
包括文件的新建、打开、保存等选项;颜色菜单栏可以进行颜色选择;线条粗细菜单栏设置线条的粗细;提示菜单栏给出提示信息。
工具栏由新建、打开和保存文件按钮、基本图形的按钮、选择字体风格复选框和字体下拉列表框组成。主类中添加并对菜单栏和工具栏添加事件监听。 事件响应的处理。
对菜单栏、工具栏和用鼠标画图的事件响应进行处理。
菜单栏中文件的新建、打开和保存菜单事件的处理:Java把每个文件都视作顺序字节流。如果要在Java中进行文件处理,则必须用到Java.io包。这个包定义了一些流类,选用FileInputStream(从文件中读入数据)和FIleOutputStream(向文件输出数据),通过建立这些文件的对象便可以打开文件。这些流相应地从InputStream和OutputStream派生,这些文件均使用文件流,所以必须将文件结构化以适应程序的要求。
7
Windows绘图系统的设计与实现
我们需要对保存的对象序列化,然后以输出流的方式保存。在程序中用newFile()、loadFile()和saveFile()三个函数分别实现文件的新建、打开和保存。
工具栏事件的处理:主要有一些Button组成。我们用ButtonHandler内部类处理基本单元事件,
ButtonHandler1内部类处理新建、打开和保存文件按钮,在画图类DrawPanel中定义CreateNewItem()函数处理工具栏中的画图事件。
鼠标画图:由于画图板主要是用来画图,所以需要在程序中添加对鼠标按下、拖动、进入、退出、移动
和单机事件进行监听并进行处理。内部类mouseA定义了完成鼠标按下、松开、进入、退出事件响应。内部类mouseB完成鼠标拖动和移动事件响应。
画图的基本功能。在程序设计中用到了动态绑定,我们可以提取他们的公共属性,先建立一个父类,然
后建立各个子类,继承父类中的方法并将父类中的draw函数重写。一些关于图形形状的类,最主要是用于画图、字体和橡皮擦等基本类型。如Circle、Triangle、Rectangle,它们都是有超类(Object类)派生的。在面向对象编程中,每个类都有画出自己的能力,每个类都有自己的draw函数,但每种形状的draw函数都不一样,但在绘制任何形状时,只需简单调用父类drawing的draw方法,然后让程序动态地根据对象的类型决定使用哪个子类的draw方法。为了使画出的图形更加美观,我们在draw函数中使用了Graphics2D的对象的引用。这样可以在不改变原程序的情况下,添加扩展的图形,是程序变得更加强大。同时,为了文件的保存,父类实现Serialize接口,将对象线性化。
3.3总体设计流程图
8
Windows绘图系统的设计与实现
4、Windows绘图板软件详细设计
4.1 各功能实现
(1)一组基本图形按钮,包括:Pencil(随笔画)、Line(直线)、Rect(矩形)、FRect(实心矩形)、Ov(椭圆)、FOval(实心椭圆)、Circle(圆)、FCircle(实心圆)、RoundRect(圆角矩形)、FrRect(实心圆角矩形)、Rubber(橡皮擦)、Word(文字)。
这些基本图形都继承于同一个父类:drawings。drawings 具有变量(属性): int x1,x2,y1,y2; //用来存放相应图形元素的坐标 int R,G,B; //用来存放图形色彩颜色信息 float stroke; //用来存放画笔粗细 int type; //用来保存图形类型
String s1; //用来保存输入文字字符串 String s2; //用来保存字体类型字符串 void draw ( Graphics2D g2d ) {} ;
draw()方法中用到了Java绘图里面的Graphics2D类,所有继承drawings类的图形子类都重写了此方法。这就是Java程序中类的继承的概念。它对于程序代码的重用是很重要的,将极大的方便和简略程序代码。 (2)程序中还包括一下三个基本操作按钮: a)新建(New):新建一个图形文件。 b)打开(Open):打开一个图形文件。 c)保存(Save):保存当前图形文件。
(3)选择颜色和设置当前画笔粗细的按钮分别为:颜色(Color)、线条粗细(Stroke)。 (4)选择当前字体风格的选择框为:粗体(BOLD)、斜体(ITALIC),用以设置当前字体的风格。 (5)选择当前字体的下拉式复选框为:Styles。
4.2绘制基本图形
基本图形包括以下几种: Pencil:随笔画,图标为:Rect:矩形,图标为:
。 Line:直线,图标为:。 Font:文本,图标为:
。 Circle:圆,图标为:
。 。 。
。
RectSelect:椭圆选择工具,图标为:RoundRect:圆角矩形,图标为:
。 Eraser:橡皮擦,图标为:
绘图时,单击工具栏上相应图形的图标,然后用鼠标拖动,在绘图区域内进行绘图即可。
4.3设置工具属性
鼠标单击工具栏相应图形的图标时,在菜单栏就会出现各工具相应的属性,例如当选中椭圆工具时,就会出现有关椭圆的属性如下图:
9
Windows绘图系统的设计与实现
4.4编辑颜色
点击Line Color(File Color),然后在即可设置线条颜色和格式。
或者点击 字体 选择所要的颜色和格式,
双击某种颜色后出现界面:
10
Windows绘图系统的设计与实现
5、程序测试
5.1主界面
5.2文件菜单界面
如上图所示,该程序为用户提供文件菜单界面,用户可以对程序的各种功能进行选择,方便用户使用。例如选择Open File键进行操作:
11
Windows绘图系统的设计与实现
12
Windows绘图系统的设计与实现
5.3Edit界面
5.4Help界面
如上图所示,该功能实现软件的说明。
13
Windows绘图系统的设计与实现
三、课程设计总结或结论
为了提高我们的实践能力,让我们学以致用,能灵活运用所学的知识进行再创造,学校特安排我们进行为期二周的java课程设计实习,并安排了指导老师帮助辅导,让我们在规范化、严谨化、实用化上面有了很大进展。
在此次Windows绘图板程序开发过程中,有很多东西值得我们思考并总结。 开发过程大体可分为以下几个步骤:
(1)思考总体设计方案:总体结构和模块外部设计,功能分配。思考要实现整个程序大体需要的几
个模块和其中用到的java语言基本操作符、语句等。
(2)画出总体设计方案流程图:用流程图的形式展现你的基本编程思想。
(3)流程图具体化:即将流程图中的几大模块的具体实现思考清楚,可以用流程图的形式展现.并
想好实现的关键代码。
(4)编辑程序代码:这是一个至关重要复杂而且需要反复修改的环节,在此环节中你将发现总体设
计和模块思想会存在很多问题,需不断改进.如何实现各函数功能,达到预期效果也将是一项繁复的工作。
(5)代码的调试:在eclipse环境下输入代码并进行调试和正确运行。在调试过程中会遇到很多需要
精化的地方,需要十足的耐心与细心,不断改进完善程序。
(6)最后修饰:程序可以正确运行之后,再不影响程序功能的情况下,运用各种辅助性符号,使界
面更加美观漂亮,操作更人性化.增强程序的新意与可行性。
通过这次课程设计,使我们更加熟悉的掌握了java语言的运用。帮助我们熟悉了更多java语言的功能,提高了我们的动手能力,学到了许多解决实际问题的宝贵经验.同时也挖掘出了我们潜在的能力,使我们对自己更有自信,对编程也更有兴趣。我相信,只要努力、勤奋、坚持不懈,就没有什么做不到的事,不能还没开始就退缩,要勇于拼搏,敢于创新。
四、参考文献
[1] 清华大学出版社的《java2实用教程》(第三版),张跃平、耿祥义著。 [2] 清华大学出版社的《java程序设计》,陈勇孝著。 [3] 清华大学出版社的《Java就业培训教程》,张孝祥著。 [4] CSDN 论坛 网址 http://www.csdn.net/。
14
因篇幅问题不能全部显示,请点此查看更多更全内容