画图系统实验报告Word文件下载.docx
《画图系统实验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《画图系统实验报告Word文件下载.docx(45页珍藏版)》请在冰点文库上搜索。
设计一个画图系统,能够实现在屏幕上任意绘画、书写的功能;
能实现画直线、画椭圆、画圆、画矩形、画空心图形,画实心图形、画3D矩形,画3D立方体等功能;
在绘图的过程中能够修改该画笔的大小以及颜色;
能够改变背景颜色;
该画图程序还需具有橡皮擦功能。
2.2系统的开发运行环境
本系统开发环境:
MyEclipse
本系统运行环境:
windowsxp或以上版本
3总体设计
3.1系统结构设计
画图系统设计的画图板主要包括菜单栏,工具栏,画图区和菜单栏四个部分。
菜单栏主要包括文件、编辑、设置、帮助等常见菜单,可完成一些基本操作;
工具栏可根实际需要选择不同的工具完成画图操作;
画图区能够对图片及文字进行编辑处理;
菜单栏用来显示鼠标当前的状态。
3.2软件功能模块及主要类设计
3.2.1功能描述
本软件可以绘制日常生活和学习中用到的基本图形及进行文本输入。
软件主要有菜单栏、工具栏、画图区、状态栏组成,菜单栏主要包括文件、编辑、设置、帮助等常见菜单。
其中文件菜单有新建、打开、保存、另存为、退出功能;
编辑菜单有撤销、恢复功能;
设置菜单含有对画笔颜色、画笔大小等的设置功能;
帮助菜单提供画图板的帮助信息及作者信息。
工具栏可以选择用户需要的图形样式、设置参数、插入文本等操作。
画图区就是简单绘图区域,用户在画图区可自由绘制图形。
状态栏可以显示鼠标的动态(画图、点击、松开、移出)和位置。
右击工具栏可设置工具是否可拖动。
此外,还可以根据不同的需要设置背景色,画笔大小、画笔颜色。
能够在任意点添加文字并设置文字样式和字体颜色。
3.2.2功能结构图
3.2.3主要类设计
Paint类
Paint类为主类,定义main方法;
MyPaint类
MyPaint类继承JFrame类,用于实现画图板的总体构架。
包括菜单栏设计、工具栏设计、画图区创建、鼠标事
件等。
画图板的一些基本功能都靠MyPaint类来实现。
DrawPanel类
DrawPanel来是MyPaint类的内部类,是用来画图的。
drawings类
drawings类是画图类,是基本图形的单元。
其各个子类用以实现画各种图形,其包括以下几个子类:
Line类绘制直线;
Circle类绘制圆;
fillCircle类绘制实心圆;
Rect类绘制矩形;
fillRect绘制实心矩形;
RoundRect绘制圆角矩形;
Oval类绘制椭圆;
Rect3D类绘制3D矩形;
Cube类绘制立方体;
Pencil类自由笔;
Rubber类橡皮类;
Word类文本类等。
4系统详细设计与实现
4.1主界面
4.1.1主界面功能设计
画图板的主界面分为菜单栏、工具栏、画图区、状态栏四部分。
4.1.2主界面设计
画图板的主界面如下图所示,在主类中加载了系统风格,使其界面更为美观;
为工具栏和工具栏按钮添加了颜色,使画图板颜色不单调;
为画图板的工具栏设置各种图标,使画图板更有个性。
在实现画图功能的基础上使其外观更为美观。
4.1.3主界面主要代码
1.加载系统风格:
try{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}//加载系统界面风格
catch(Exceptione){
}
2.设置窗体图标:
Toolkitkit=Toolkit.getDefaultToolkit();
//获取Toolkit实例
Imageimage=kit.getImage("
Icons/Title.jpg"
);
//获取图片
setIconImage(image);
//设置窗体图标
4.2菜单栏
4.2.1菜单栏功能设计
菜单栏包括文件、编辑、设置、帮助四部分。
其中,文件菜单实现了新建、打开、保存、另存为、退出功能;
编辑菜单实现了撤销和恢复功能;
设置菜单实现了画笔颜色、画笔大小和立方体宽度的设置;
帮助菜单实现了关于画图板的帮助信息及作者的信息。
4.2.2菜单栏界面设计
1.文件菜单:
2.编辑菜单:
3.设置菜单
4.帮助菜单
5.画笔大小
6.画笔颜色
4.2.3菜单栏主要代码
菜单栏代码较多,详细代码见附录。
4.3工具栏
4.3.1工具栏功能设计
工具栏是一系列快捷操作的按钮,分别是:
新建、打开、保存、自由画笔、直线、空心矩形、实心矩形、空心椭圆、实心椭圆、圆、实心圆、空心圆角矩形、实心圆角矩形、空心3D矩形、实心3D矩形、3D长方体、橡皮、设置背景色、画笔颜色、画笔粗细、添加文字,用来实现相应的功能。
另外还为工具栏设置了按钮图片和鼠标右击事件,右击鼠标可以设置工具栏是否可拖动。
4.3.2工具栏界面设计
4.3.3工具栏主要代码
1.工具栏按钮图标
items=newImageIcon[names.length];
//创建各种基本图形的按钮
choices=newJButton[names.length];
buttonPanel=newJToolBar(JToolBar.VERTICAL);
buttonPanel=newJToolBar(JToolBar.HORIZONTAL);
ButtonHandlerhandler=newButtonHandler();
ButtonHandler1handler1=newButtonHandler1();
buttonPanel.setBackground(newColor(0,260,280));
//工具栏背景色设置
//导入图形图标,图标存放在项目文件夹下的Icons目录内
for(inti=0;
i<
choices.length;
i++){
items[i]=newImageIcon("
Icons/"
+names[i]+"
.jpg"
choices[i]=newJButton(items[i]);
choices[i].setToolTipText(tipText[i]);
choices[i].setBackground(newColor(204,204,204));
//按钮背景色设置
buttonPanel.add(choices[i]);
}
2.鼠标右击事件:
//工具栏右击菜单,设置工具栏是否可拖动
voidToolMenu(){
finalJPopupMenuToolMenu;
ToolMenu=newJPopupMenu();
finalJCheckBoxmove=newJCheckBox("
工具栏是否可拖动"
move.setBackground(newColor(0,255,0));
ToolMenu.add(move);
buttonPanel.addMouseListener(newMouseAdapter(){
publicvoidmousePressed(MouseEvente){
if(e.getModifiers()==InputEvent.BUTTON3_MASK)
ToolMenu.show(buttonPanel,e.getX(),e.getY());
});
move.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
if(move.isSelected()){
buttonPanel.setFloatable(true);
}else{
buttonPanel.setFloatable(false);
}
});
}
4.4画图区
4.4.1画图区功能设计
画图区可以绘制各种图形,可以进行擦除操作,还可以根据实际需要添加文本。
4.4.2画图区界面设计
4.4.3画图区主要代码
详细代码见附录。
4.5状态栏
4.5.1状态栏功能设计
状态栏是显示鼠标的状态的信息栏,随时反馈鼠标信息。
4.5.2状态栏设计
4.5.3状态栏主要代码
部分代码如下,详细代码见附录:
publicvoidmousePressed(MouseEvente){
statusBar.setText("
鼠标点击:
["
+e.getX()+"
"
+e.getY()+"
]"
//设置状态提示
itemList[index].x1=itemList[index].x2=e.getX();
itemList[index].y1=itemList[index].y2=e.getY();
//如果当前选择的图形是随笔画或者橡皮擦,则进行下面的操作
if(currentChoice==3||currentChoice==16){
index++;
createNewItem();
5设计小结
在本次的课程设计中,应用了java中开发图形应用程序的常用控件、事件处理机制、常用功能实现等。
设计的此软件基本达到理想的效果,在在编写这一软件的过程中我学到了很多java编程知识,并学会了如何快速的改正程序中的错误。
从编写记事本到画图系统的设计,有很多相同的地方,但不同的地方更多。
在编写菜单栏时可以借鉴记事本中的编程思想。
但是画图系统增添了一行工具栏,实现了更多的功能,还用到了文件的输入输出流等。
本次设计我对面向对象的程序设计有了一个总体的把握,从软件工程的角度看,有了一个完整的脉络,如需求、设计实现、测试。
编程中遇到了很多问题,通过查阅书籍、上网搜资料以及同学之间的交流讨论,最终完成了画图软件的设计。
经过这两周的课程设计,使我收获了很多java编程方面的知识,而这些知识是实践中才能学得到的。
这让我想起一句话:
纸上得来终觉浅,绝知此事要躬行。
没错,学习不仅仅是大脑的思考,更要有实践的配合。
现在觉得自己掌握的Java知识比课堂上学到的多很多,同时对其他编程语言的学习也有了一定的帮助。
其实,这只是java编程知识的冰山一角,我还有很多东西没有学到,仍需继续努力。
但是由于所学知识有限,能力水平有限,难免有些功能还不能很好的实现,还望老师批评指正。
在今后的学习中,我还会将更多的时间与精力投入到Java的学习中,不断为自己所学的知识补充新鲜血液。
参考文献
(1)耿祥义,张跃平.《Java实用教程(第3版)》北京:
电子工业出版社,2012.1
(2)陈明.《Java语言程序设计课程实践》,北京:
清华大学出版社,2009.1
(3)陈嵩等.新手学Java[M].北京:
北京希望电子出版社,2010
6附录
源程序清单
Paint.java:
importjava.awt.*;
importjava.awt.event.*;
importjava.io.*;
importjavax.swing.*;
importjavax.swing.event.UndoableEditEvent;
importjavax.swing.undo.*;
publicclassPaint{
publicstaticvoidmain(String[]args){
try{
}//加载系统界面风格
newMyPaint();
classMyPaintextendsJFrame{
JMenuBarjmenuBar;
privateObjectInputStreaminput;
privateObjectOutputStreamoutput;
//定义输入输出流,用来调用和保存图像文件
privateJButtonchoices[];
//按钮数组
privateStringnames[]={
"
New"
//新建
Open"
//打开
Save"
//保存
Pencil"
//自由画笔
Line"
//直线
Rect"
//空心矩形
fRect"
//实心矩形
Oval"
//空心椭圆
fOval"
//实心椭圆
Circle"
//圆形
fCircle"
//实心圆形
RoundRect"
//圆角矩形
frRect"
//实心圆角矩形
3DRect"
//3D矩形
f3DRect"
//实心3D矩形
Cube"
//立方体
Rubber"
//橡皮擦
bgColor"
//背景色
Color"
//画笔颜色
Stroke"
//画笔大小
Word"
//文本输入
};
GraphicsEnvironmentge=GraphicsEnvironment.getLocalGraphicsEnvironment();
StringstyleNames[]=ge.getAvailableFontFamilyNames();
//加载系统字体
privateIconitems[];
privateStringtipText[]={"
新建"
打开"
保存"
自由画笔"
直线"
空心矩形"
实心矩形"
空心椭圆"
实心椭圆"
圆"
实心圆"
空心圆角矩形"
实心圆角矩形"
3D矩形"
3D长方体"
橡皮"
设置背景色"
画笔颜色"
画笔粗细"
添加文字"
};
//按钮提示说明
JToolBarbuttonPanel;
//定义按钮面板
privateJLabelstatusBar;
//显示鼠标状态的提示条
privateDrawPaneldrawingArea;
//定义画图区域
privateintwidth=850,height=550;
//画图区域初始大小
drawings[]itemList=newdrawings[5000];
//用来存放基本图形的数组
privateintcurrentChoice=3;
//设置初始画笔为自由笔画
intindex=0;
//已绘制图形数目
privateColorcolor=Color.black;
//画笔颜色
intR,G,B;
//颜色值
intf1,f2;
//存放当前字体风格
Stringstyle1;
//存放当前字体
privatefloatstroke=1.0f;
//设置画笔粗细
staticintthickness=10;
//立方体宽度
JCheckBoxbold,italic;
//定义字体风格选择框
MyUndoManagermyUndo;
JComboBoxstyles;
//字体选择框
Toolkitkit=Toolkit.getDefaultToolkit();
Imageimage=kit.getImage("
publicMyPaint(){
setTitle("
绘图系统第十组版"
setLocation(300,100);
//画图板窗口起始位置
setSize(750,550);
//setBounds(200,100,850,750);
//画图板大小
setVisible(true);
setIconImage(image);
setCursor(newCursor(Cursor.HAND_CURSOR));
//设置画图板鼠标样式
drawingArea=newDrawPanel();
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
addWindowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
if(JOptionPane.showConfirmDialog(newFrame(),"
你确定退出吗?
"
退出提示"
JOptionPane.WARNING_MESSAGE)==JOptionPane.OK_OPTION)
System.exit(0);
}
});
//关闭确认提示
getJMenuBar();
//获取菜单栏
myUndo=newMyUndoManager();
items=newImageIcon[names.length];
ButtonHandler1handler1=newButtonHandler1();
buttonPanel.setBackground(newColor(0,260,280));
//导入图形图标,图标存放在项目文件夹下的Icons目录内
for(inti=0;
items[i]=newImageIcon("
choices[i]=newJButton(items[i]);
choices[i].setToolTipText(tipText[i]);
choices[i].setBackground(newColor(204,204,204));
buttonPanel.add(choices[i]);
ToolMenu();
//工具栏右击事件调用
//将动作侦听器加入按钮里面
for(inti=3;
choices.length-4;
choices[i].addActionListener(handler);
choices[0].addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
newFile();
choices[1].addActionListener(newActionListener(){
loadFile();
choices[2].addActionListener(newActionListener(){
saveFile();
}
choices[choices.length-4].addActionListener(handler1);
choices[choices.length-3].addActionListener(handler1);
choices[choices.length-2].addActionListener(handler1);
choices[choices.length-1].addActionListener(handler1);
//字体风格选择
styles=newJComboBox(styleNames);
styles.setMaximumRowCount(10);
styles.a