Java画图板课程设计报告.docx
- 文档编号:28899510
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:25
- 大小:381.27KB
Java画图板课程设计报告.docx
《Java画图板课程设计报告.docx》由会员分享,可在线阅读,更多相关《Java画图板课程设计报告.docx(25页珍藏版)》请在冰豆网上搜索。
Java画图板课程设计报告
目 录
1引言
课程设计选题
《画图板软件开发和设计》
课程设计的目的
巩固和加深以Java语言为基础的面向对象编程技术理论知识的理解,提高实际动手编程能力的培养,掌握以Java为核心的应用软件开发方案,达到能独立阅读、编制和调试一定规模的Java程序的水平。
本选题的设计背景
日常生活、学习中我们经常需要画图,简单的画图我们可以手工画图,但往往还是不能满足需求。
因此,借助计算机准确而快速的画图就十分有必要了。
好的画图工具能够很好的完成日常生活中的各种画图工作。
学习了Java语言后设计开发一个画图软件是对Java语言学习的巩固以及提高。
能够在实践中更深的理解面向对象语言,同时提高了解决问题的能力。
需求分析
功能需求
考虑到画图板的实际需要,画图板要实现打开、保存图片,用于打开本地图片或保存当前图片至本地;选择需要绘制的图形,用于选择需要绘制的图形样式,如直线、矩形、椭圆等;设置背景色、画笔色以及画笔大小,用于设置画板背景颜色、画笔颜色和当前画笔粗细;擦除错误操作;显示帮助信息等。
软件开发运行环境
本软件开发平台:
Java
本软件集成开发环境:
MyEclipse
本软件运行环境:
Windowsxp或以上版本
总体设计
1.1软件结构设计
3.1.1结构设计
菜单栏的设计及功能实现:
菜单栏主要包括文件、帮助等常见菜单。
其中文件菜单有新建、打开、保存、另存为等功能;帮助菜单提供关于画图板的信息。
画图区的设计:
对图片的编辑处理区。
工具栏的设计:
根据实际需要选择不同的工具完成画图操作。
其他功能设计。
软件功能模块及主要类设计
3.2.1功能描述
本软件可以绘制日常生活、学习中的一般图形。
软件主要有菜单栏、工具栏、画图区组成,菜单栏具有新建、打开、保存等常见的功能;工具栏可以选择用户需要的图形样式、设置参数、插入文本等操作;画图区就是简单绘图区域,用户在画图区可自由绘制图形。
还可以根据不同的需要设置背景色,画笔大小、画笔颜色。
能够在任意点添加几何图形等。
3.2.2总体结构图
图3.2.1画图板总体结构图
3.2.3主要类设计
(1)Paint类
Paint类为主类,定义main方法;
(2)MyPaint类
MyPaint类继承JFrame类,用于实现画图板的总体构架。
包括菜单栏设计、工具栏设计、画图区创建等等。
画图板的基本功能都靠MyPaint类来实现。
(3)DrawPanel类
DrawPanel来是MyPaint类的内部类,是用来画图的。
(4)drawings类
drawings类是画图类,基本图形的单元。
其各个子类用以实现画各种图形包括以下几个子类:
1.Line类:
绘制直线;
2.Rect类:
绘制矩形;
3.fillRect:
绘制实心矩形;
4.Oval类:
绘制椭圆;
5.fillOval类:
绘制实心椭圆;
6.Circle类:
绘制圆;
7.fillCircle类:
绘制实心圆;
8.RoundRect:
绘制圆角矩形;
9.fillRoundRect类:
绘制实心圆角矩形;
10.Pencil类:
自由笔;
11.Rect3D类:
绘制3D矩形;
12.fillRect3D类:
绘制实现3D矩形;
13.Cube类:
绘制立方体;
14.Rubber类:
橡皮类;
15.Word类:
文本类;
详细设计与实现
主界面
4.1.1主界面功能设计
画图板的主界面分为菜单栏、工具栏、画图区、状态栏四部分。
其中,菜单栏实现了图片的打开、新建、保存等操作;工具栏实现了画笔的各种操作;画图区实现了图片的操作面板;状态栏实现了显示鼠标当前状态。
4.1.2主界面设计
画图板的主界面如图所示,在主类中加载了系统风格,使其界面更为美观;为工具栏和工具栏按钮添加了颜色,使画图板颜色不单调;为画图板得主窗口设置图标,使画图板更有个性。
在实现画图功能的基础上使其外观更为人性化。
图4.1.1主界面图
4.1.3主界面主要代码
设置窗体图标:
Toolkitkit=();getSystemLookAndFeelClassName());
}4.2.14.2.2件菜单:
图4.2.1文件菜单
2.编辑菜单:
图4.2.3编辑菜单
3.设置菜单:
图4.2.3设置菜单
4.帮助菜单:
图4.2.4帮助菜单
5.打开文件窗口:
图4.2.5打开窗口
6.撤销菜单(此功能尚不完善):
图4.2.6撤销操作
7.画笔颜色选择:
图4.2.7画笔颜色选择
8.画笔大小设置:
图4.2.8设置画笔大小
9.立方体宽度设置:
图4.2.8设置立方体宽度
10.“关于画图板”帮助:
图4.2.10关于画图板
11.“关于作者”帮助
图4.2.11关于作者
4.2.3菜单栏主要代码
菜单栏代码较多,详细代码见附录。
工具栏
4.3.1工具栏功能设计
工具栏是一系列快捷操作的按钮,分别是:
新建、打开、保存、自由画笔、直线、空心矩形、实心矩形、空心椭圆、实心椭圆、圆、实心圆、空心圆角矩形、实心圆角矩形、3D矩形、3D矩形、3D长方体、橡皮、设置背景色、画笔颜色、画笔粗细、添加文字,用来实现相应的功能。
另外还为工具栏设置了按钮图片和鼠标右击事件,右击鼠标可以设置工具栏是否可拖动。
4.3.2工具栏界面设计
图4.3.1工具栏界面
4.3.3工具栏主要代码
工具栏按钮图标:
items=newImageIcon[];
if");
choices[i]=newJButton(items[i]);
choices[i].setToolTipText(tipText[i]);
choices[i].setBackground(newColor(0,255,0));4.4.14.4.2
4.4.14.4.34.5.14.5.2
4.5.14.5.31=();
itemList[index].y1=();
}
itemList[index].x2=();
itemList[index].y2=();
repaint();
index++;
createNewItem();
}
小结和展望
三周的时间很快,作为Java初学者的我在三周的时间内完成画图板软件的开发、设计不免有很多漏洞。
但是重要的不是结果,而是从中学到了什么!
从写字板到画图板,相同的地方不少,但不同的地方更多。
写字板是文本处理,从文本区定义到读写文件都相对容易些。
而画图板就不同了,画图面板要自己定义,还要设置各种参数。
一开始就觉得挺难入手,但是作为Java语言的入门级开发产品,不管多少困难也要坚持到最后。
通过查阅书籍、上网搜索资料以及同学间的交流,最终还是比较成功的完成了画图板软件的设计。
画图板软件的开发,使我收获了更多的知识。
而这些知识是实践中才能学得到的。
想起一句话:
纸上得来终觉浅,绝知此事要躬行。
没错,学习不仅仅是大脑的思考,更要有实践的配合。
现在觉得自己掌握的Java知识比课堂上学到的多很多,同时对其他编程语言的学习也有了一定的帮助。
软件设计向来不是一路顺风的,在开发过程中总会突发奇想的实现某些其他功能,但总是失败,比如像文本处理的撤销与恢复操作,觉得这个功能很有必要,但是没有实现。
如果画错了就只能重画了,因此解决这一问题意义很大,期待以后能够解决这一问题。
参考文献
[1]耿祥义,张跃平.Java大学实用教程[M].北京:
电子工业出版社,2011.
[2]陈嵩等.新手学Java[M].北京:
北京希望电子出版社,2010.
附录
使用说明书
本软件由开发,运行文件后直接进入窗口。
菜单栏有新建、打开、保存、另存为、退出功能。
可用键盘快捷键实现相应功能。
打开文件只可打开本软件生成的图片文件,再次提示用户注意。
编辑菜单尚不完善,后续版本将会解决,望用户包涵。
设置菜单可设置画笔颜色、画笔大小和立方体宽度,如有需要可在此进行设置。
帮助菜单显示本软件信息与作者信息,如有需要,请您按照相关联系方式进行联系。
由于作者水平有限,本软件不免有很多错误的地方,欢迎广大用户提出意见!
源程序清单
:
import.*;
import.*;
import.*;
importclassPaint{
publicstaticvoidmain(String[]args){
try{
(UIManager.
getSystemLookAndFeelClassName());
}1.0fif");
choices[i]=newJButton(items[i]);
choices[i].setToolTipText(tipText[i]);
choices[i].setBackground(newColor(0,255,0));ddActionListener(handler);
}
choices[0].addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
newFile();
}
});
choices[1].addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
loadFile();
}
});
choices[2].addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
saveFile();
}
});
choices[].addActionListener(handler1);
choices[].addActionListener(handler1);
choices[].addActionListener(handler1);
choices[].addActionListener(handler1);
1=itemList[index].x2=();
itemList[index].y1=itemList[index].y2=();
1=itemList[index].x2=();
itemList[index].y1=itemList[index].y2=();
index++;
createNewItem();
}
1=();
itemList[index].y1=();
Stringinput;
input=("输入要添加的文本内容");
itemList[index].s1=input;
itemList[index].x2=f1;
itemList[index].y2=f2;
itemList[index].s2=style1;
index++;
currentChoice=17;
createNewItem();
();
}
}
publicvoidmouseReleased(MouseEvente){
("鼠标松开:
["+()+","+()+"]");
if(currentChoice==3||currentChoice==16){
itemList[index].x1=();
itemList[index].y1=();
}
itemList[index].x2=();
itemList[index].y2=();
repaint();
index++;
createNewItem();
}
publicvoidmouseEntered(MouseEvente){
("鼠标进入:
["+()+","+()+"]");
}
publicvoidmouseExited(MouseEvente){
("鼠标移出:
["+()+","+()+"]");
}
}
1=itemList[index].x2=itemList[index].x1=();
itemList[index-1].y1=itemList[index].y2=itemList[index].y1=();
index++;
createNewItem();
}
else{
itemList[index].x2=();
itemList[index].y2=();
}
repaint();
}
publicvoidmouseMoved(MouseEvente){
("鼠标位置:
["+()+","+()+"]");
}
}
ype=currentChoice;
itemList[index].R=R;
itemList[index].G=G;
itemList[index].B=B;
itemList[index].stroke=stroke;
itemList[index].thickness=thickness;
}
=R;
itemList[index].G=G;
itemList[index].B=B;
}
troke=stroke;
}
hickness=thickness;
createNewItem();
repaint();
}
1.0fquals(""))
(fileChooser,"无效的文件名",
"无效的文件名",;
else{
try{
FileInputStreamfis=newFileInputStream(fileName);
input=newObjectInputStream(fis);
drawingsinputRecord;
intcountNumber=0;
countNumber=();
for(index=0;index inputRecord=(drawings)(); itemList[index]=inputRecord; } createNewItem(); (); repaint(); } catch(EOFExceptionendofFileException){ (this,"没有更多的记录文件", "没有找到类",); } catch(ClassNotFoundExceptionclassNotFoundException){ (this,"无法创建对象", "文件终点",); } catch(IOExceptionioException){ (this,"读取文件时产生错误", "读取错误",); } } } quals("")) (fileChooser,"无效的文件名", "无效的文件名",; else{ try{ (); FileOutputStreamfos=newFileOutputStream(fileName); output=newObjectOutputStream(fos); (index); for(inti=0;i drawingsp=itemList[i]; (p); ();ndo();edo();ddEdit()); } } //工具栏右击菜单,设置工具栏是否可拖动 voidToolMenu(){ finalJPopupMenuToolMenu; ToolMenu=newJPopupMenu(); finalJCheckBoxmove=newJCheckBox("工具栏是否可拖动"); (newColor(0,255,0)); (move); (newMouseAdapter(){ publicvoidmousePressed(MouseEvente){ if()== (buttonPanel,(),()); } }); (newActionListener(){ publicvoidactionPerformed(ActionEvente){ if()){ (true); }else{ (false); } } }); } } : import画图类,基本图形单元,用到串行化接口,保存时所用 classdrawingsimplementsSerializable{ intx1,y1,x2,y2;//定义坐标属性 intR,G,B;//定义色彩属性 floatstroke;//定义线条粗细属性 inttype;//定义字体属性 Strings1; Strings2;//定义字体风格属性 intthickness; voiddraw(Graphics2Dg2d){ };//定义绘图函数 } //各种基本图形单元的子类,都继承自父类drawings //直线类 classLineextendsdrawings{ voiddraw(Graphics2Dg2d){ (newColor(R,G,B)); (newBasicStroke(stroke,,); (x1,y1,x2,y2); } } //矩形类 classRectextendsdrawings{ voiddraw(Graphics2Dg2d){ (newColor(R,G,B)); (newBasicStroke(stroke)); (x1,x2),(y1,y2), (x1-x2),(y1-y2)); } } //实心矩形类 classfillRectextendsdrawings{ voiddraw(Graphics2Dg2d){ (newColor(R,G,B)); (newBasicStroke(stroke)); (x1,x2),(y1,y2),(x1-x2),(y1-y2)); } } //椭圆类 classOvalextendsdrawings{ voiddraw(Graphics2Dg2d){ (newColor(R,G,B)); (newBasicStroke(stroke)); (x1,x2),(y1,y2),(x1-x2),(y1-y2)); } } //实心椭圆 classfillOvalextendsdrawings{ voiddraw(Graphics2Dg2d){ (newColor(R,G,B)); (newBasicStroke(stroke)); (x1,x2),(y1,y2),(x1-x2),(y1-y2)); } } //圆类 classCircleextendsdrawings{ voiddraw(Graphics2Dg2d){ (newColor(R,G,B)); (newBasicStroke(stroke)); (x1,x2),(y1,y2), (x1-x2),(y1-y2)), (x1-x2),(y1-y2))); } } //实心圆 classfillCircleextendsdrawings{ voiddraw(Graphics2Dg2d){ (newColor(R,G,B)); (newBasicStroke(stroke)); (x1,x2),(y1,y2), (x1-x2),(y1-y2)), (x1-x2),(y1-y2))); } } //圆角矩形类 classRoundRectextendsdrawings{ voiddraw(Graphics2Dg2d){ (newColor(R,G,B)); (newBasicStroke(stroke)); (x1,x2),(y1,y2), (x1-x2),(y1-y2),50,35); } } //实心圆角矩形类 classfillRoundRectextendsdrawings{ voiddraw(Graphics2Dg2d){ (newColor(R,G,B)); (newBasicStroke(stroke)); (x1,x2),(y1,y2), (x1-x2),(y1-y2),50,35); } } //随笔画类 classPencilextendsdrawings{ voiddraw(Graphics2Dg2d){ (newColor(R,G,B)); (newBasicStroke(stroke, ); (x1,y1,x2,y2); } } //3D矩形类 classRect3Dextendsdrawings{ voiddraw(Graphics2Dg2d){ (newColor(R,G,B)); (newBasicStroke(stroke)); (x1,x2),(y1,y2),(x1-x2), (y1-y2),false); } } //填充的3D矩形类 classfillRect3Dextendsdrawings{ voiddraw(Graphics2Dg2d){ (newColor(R,G,B)); (newBasicStroke(stroke)); (x1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 画图板 课程设计 报告