画图系统实验报告
面向对象程序设计课外实践报告
项目名称:画图系统
所在班级:2012级
小组成员:
任课教师:
起止时间: 2013/12/16--2013/12/31
项目基本信息
课外实践评定成绩记录
1 引言
1.1课程设计选题
《画图系统》
1.2 课程设计的目的
在实践中更深的学习和理解以Java 语言为基础的面向对象程序设计语言,掌握以Java为核心的应用软件开发方案,达到能独立阅读、编制和调试一定规模的Java 程序的水平,与此同时提高我们实际动手编程的能力、解决问题的能力。程序通过调用JAVA提供的基本类进行了简单的界面设计,运用了JAVA中类的继承特性实现了对父类方法的调用,运用了适配器类简化了监听器类的重写工作。
1.3 课程设计的背景
在日常生活和学习中,我们经常需要画图,简单的画图我们可以手工完成,但往往还是不能满足需求。因此,借助计算机准确而快速的画图就显得十分有必要了。好的画图工具能够很好的完成日常生活中的各种画图工作。
2 需求分析
2.1功能需求
设计一个画图系统,能够实现在屏幕上任意绘画、书写的功能;能实现画直线、画椭圆、画圆、画矩形、画空心图形,画实心图形、画3D矩形,画3D立方体等功能;在绘图的过程中能够修改该画笔的大小以及颜色;能够改变背景颜色;该画图程序还需具有橡皮擦功能。
2.2系统的开发运行环境
本系统开发环境:MyEclipse
本系统运行环境: windows xp 或以上版本
3总体设计
3.1系统结构设计
画图系统设计的画图板主要包括菜单栏,工具栏,画图区和菜单栏四个部分。菜单栏主要包括文件、编辑、设置、帮助等常见菜单,可完成一些基本操作;工具栏可根实际需要选择不同的工具完成画图操作;画图区能够对图片及文字进行编辑处理;菜单栏用来显示鼠标当前的状态。
3.2软件功能模块及主要类设计
3.2.1功能描述
本软件可以绘制日常生活和学习中用到的基本图形及进行文本输入。软件主要有菜单栏、工具栏、画图区、状态栏组成,菜单栏主要包括文件、编辑、设置、帮
助等常见菜单。其中文件菜单有新建、打开、保存、另存为、退出功能;编辑菜单有撤销、恢复功能;设置菜单含有对画笔颜色、画笔大小等的设置功能;帮助菜单提供画图板的帮助信息及作者信息。工具栏可以选择用户需要的图形样式、设置参数、插入文本等操作。画图区就是简单绘图区域,用户在画图区可自由绘制图形。状态栏可以显示鼠标的动态(画图、点击、松开、移出)和位置。右击工具栏可设置工具是否可拖动。此外,还可以根据不同的需要设置背景色,画笔大小、画笔颜色。能够在任意点添加文字并设置文字样式和字体颜色。
3.2.2功能结构图
3.2.3主要类设计
4 系统详细设计与实现
4.1主界面
4.1.1主界面功能设计
画图板的主界面分为菜单栏、工具栏、画图区、状态栏四部分。
4.1.2主界面设计
画图板的主界面如下图所示,在主类中加载了系统风格,使其界面更为美观;为工具栏和工具栏按钮添加了颜色,使画图板颜色不单调;为画图板的工具栏设置各种图标,使画图板更有个性。在实现画图功能的基础上使其外观更为美观。
4.1.3主界面主要代码
1.加载系统风格:
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} //加载系统界面风格
catch (Exception e){
}
2.设置窗体图标:
Toolkit kit=Toolkit.getDefaultToolkit(); //获取Toolkit实例
Image image=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=new ImageIcon[names.length];
//创建各种基本图形的按钮
choices=new JButton[names.length];
buttonPanel = new JToolBar( JToolBar.VERTICAL);
buttonPanel = new JToolBar( JToolBar.HORIZONTAL);
ButtonHandler handler=new ButtonHandler();
ButtonHandler1 handler1=new ButtonHandler1();
buttonPanel.setBackground(new Color(0,260,280)); //工具栏背景色设置
//导入图形图标,图标存放在项目文件夹下的Icons目录内
for(int i=0;i items[i]=new ImageIcon("Icons/"+names[i]+".jpg"); choices[i]=new JButton(items[i]); choices[i].setToolTipText(tipText[i]); choices[i].setBackground(new Color(204,204,204)); //按钮背景色设置 buttonPanel.add(choices[i]); } 2.鼠标右击事件: // 工具栏右击菜单,设置工具栏是否可拖动 void ToolMenu() { final JPopupMenu ToolMenu; ToolMenu = new JPopupMenu(); final JCheckBox move = new JCheckBox("工具栏是否可拖动"); move.setBackground(new Color(0, 255, 0)); ToolMenu.add(move); buttonPanel.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { if (e.getModifiers() == InputEvent.BUTTON3_MASK) ToolMenu.show(buttonPanel, e.getX(), e.getY()); } }); move.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { 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状态栏主要代码 部分代码如下,详细代码见附录: public void mousePressed(MouseEvent e){ 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){ itemList[index].x1=itemList[index].x2=e.getX(); itemList[index].y1=itemList[index].y2=e.getY(); 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: import java.awt.*; import java.awt.event.*; import java.io.*; import javax.swing.*; import javax.swing.event.UndoableEditEvent; import javax.swing.undo.*; public class Paint{ public static void main(String[] args){ try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } //加载系统界面风格 catch (Exception e){ } new MyPaint(); } }