java课程设计.docx
- 文档编号:9948300
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:33
- 大小:153.32KB
java课程设计.docx
《java课程设计.docx》由会员分享,可在线阅读,更多相关《java课程设计.docx(33页珍藏版)》请在冰豆网上搜索。
java课程设计
课程设计报告
课程名称:
面向对象程序设计课程设计
课程设计题目:
画图板
系:
数学与计算科学系
专业:
信息与计算科学
年级、班:
信计1002班
姓名:
学号:
201005002211
指导教师:
职称:
讲师
2013年6月
目 录
1引言1
1.1课程设计选题1
1.2课程设计的目的1
1.3本选题的设计背景1
2需求分析1
2.1功能需求1
2.2系统的开发运行环境2
3总体设计2
3.1系统体系结构设计2
3.2系统功能模块及主要类设计3
4详细设计与实现4
4.1绘图主界面模块4
4.2保存打开模块5
5小结和展望5
参考文献6
附录7
使用说明书7
源程序清单7
1引言
1.1课程设计选题
《画图板软件开发和设计》
该画图板在图形界面下可以画椭圆,矩形,橡皮擦,填充颜色等基本功能。
1.2课程设计的目的
巩固和加深以Java语言为基础的面向对象编程技术理论知识的理解,提高实际动手编程能力的培养,掌握以Java为核心的应用软件开发方案,达到能独立阅读、编制和调试一定规模的Java程序的水平,程序通过调用JAVA提供的基本类进行了简单的界面设计,运用了JAVA中类的继承特性实现了对父类方法的调用,并多次使用CASE语句实现绘图菜单的选择,运用了适配器类简化了监听器类的重写工作。
1.3本选题的设计背景
在现实生活中,我们会经常遇到些需要绘制简单图形的问题,但是网络上大多数的绘图工具都比较复杂,所以我们需要一些简单实用的绘图小工具,以便对工作带来最大的满足与需求,于是我就设计了一个简单的绘图小工具,虽然不很常熟但是我觉得还挺实用的。
需求分析
1.1功能需求
设计一个画图工具,能够实现画图工具、画直线、画椭圆等功能,并且在绘图的过程中能够修改该画笔的大小以及颜色。
该画图程序还需具有橡皮擦功能。
1、这个画图程序,最基本的功能是,作为一个画图工具利用它实现在屏幕上任意绘画、书写的功能;2、利用这个画图程序,通过选择画直线、画箭头、画多边形、画矩形、椭圆、圆形等功能选项并且在屏幕上拖动鼠标操作能实现画出相应图形的功能;3、这个画图程序,还需具备橡皮擦的功能,利用这个橡皮擦能够擦除屏幕上的图案,并且此橡皮擦也应该能够改变大小;4、这个画图程序,还应该做到能够改变画笔颜色的功能;5、这个画图程序,还应该具备能够清除整个屏幕已绘制图画的功能。
2.2系统的开发运行环境
本系统集成开发环境:
MyEclipse
本系统运行环境:
windowsxp或以上版本
MyEclipse是一个开放源代码的、基于Java的可扩展开发平台。
编写代码和运行软件都很方便。
编写过程中要是有错误就有提示,非常方便用户修改代码。
总体设计
3.1系统体系结构设计
本程序主体为一个文件:
Main.java。
其中包括的程序段有:
1DrawingBoard():
构造函数,用以初始化。
2chooseColor():
选择当前绘图颜色程序段。
3setStroke():
设置当前画笔粗细程序段。
4loadFile():
调用图形文件程序段。
5newFile():
新建一个图形文件程序段。
6saveFile():
保存当前所绘制图形程序段。
7creatNewShape():
新建一个基本图形单元程序段。
相应的内部类有:
1MouseA:
继承了MouseAdapter,用来完成鼠标相应事件的操作,如单击、松开、进入和离开等。
2MouseB:
继承MouseMotionAdapter,用来完成鼠标拖动和鼠标移动的相应事件操作。
3drawiArea:
是窗口的一个子类,用来画图的面板区域。
此外,还继承了父类Element的基本图形子类,如前所述,这里不再重复。
3.2系统功能模块及主要类设计
画板主要由以下几个部分组成:
3.2.1主窗体的设计。
主类(Main)用来生成主界面,完成画图板的主要框架。
主类由JFrame派生出来。
主界面由菜单栏、工具栏和画图区域三部分组成,布局格式采用BorderLayout布局形式。
3.2.2菜单栏和工具栏的设计。
菜单栏包括文件菜单栏、颜色菜单栏、线条粗细菜单栏和提示菜单栏。
其中①文件菜单栏包括文件的新建、打开、保存等选项;②颜色菜单栏可以进行颜色选择;③线条粗细菜单栏设置线条的粗细;④提示菜单栏给出提示信息。
工具栏由新建、打开和保存文件按钮、基本图形的按钮、选择字体风格复选框和字体下拉列表框组成。
在主类中添加并对菜单栏和工具栏添加事件监听。
3.2.3事件响应的处理。
对菜单栏、工具栏和用鼠标画图的事件响应进行处理。
(1)菜单栏中文件的新建、打开和保存菜单事件的处理:
Java把每个文件都视作顺序字节流。
如果要在Java中进行文件处理,则必须用到Java.io包。
这个包定义了一些流类,选用FileInputStream(从文件中读入数据)和FIleOutputStream(向文件输出数据),通过建立这些文件的对象便可以打开文件。
这些流相应地从InputStream和OutputStream派生,这些文件均使用文件流,所以必须将文件结构化以适应程序的要求。
我们需要对保存的对象序列化,然后以输出流的方式保存。
在程序中用newFile()、loadFile()和saveFile()三个函数分别实现文件的新建、打开和保存。
(2)工具栏事件的处理:
主要有一些Button组成。
我们用ButtonHandler内部类处理基本单元事件,ButtonHandler1内部类处理新建、打开和保存文件按钮,在画图类DrawArea中定义CreateNewShape()函数处理工具栏中的画图事件。
(3)鼠标画图:
由于画图板主要是用来画图,所以需要在程序中添加对鼠标按下、拖动、进入、退出、移动和单机事件进行监听并进行处理。
内部类mouseA定义了完成鼠标按下、松开、进入、退出事件响应。
内部类mouseB完成鼠标拖动和移动事件响应。
4详细设计与实现
4.1绘图主界面模块
4.1.1.功能设计
在程序设计中用到了动态绑定,我们可以提取他们的公共属性,先建立一个父类,然后建立各个子类,继承父类中的方法并将父类中的draw函数重写。
一些关于图形形状的类,最主要是用于画图、字体和橡皮擦等基本类型。
如Circle、Triangle、Rectangle,它们都是有超类(Object类)派生的。
在面向对象编程中,每个类都有画出自己的能力,每个类都有自己的draw函数,但每种形状的draw函数都不一样,但在绘制任何形状时,只需简单调用父类drawing的draw方法,然后让程序动态地根据对象的类型决定使用哪个子类的draw方法。
为了使画出的图形更加美观,我们在draw函数中使用了Graphics2D的对象的引用。
这样可以在不改变原程序的情况下,添加扩展的图形,是程序变得更加强大。
同时,为了文件的保存,父类实现Serialize接口,将对象线性化。
4.1.2.界面设计
我们可以看到,整个程序界面很简洁,而且界面操作、提示内容全部是中文,一目了然。
在左上方的菜单栏里有文件、颜色、线条粗细、帮助4个下拉式菜单,可以对绘图文件进行相应的操作。
下面一排是工具栏的工具按钮,从左到右依次为:
、直线、矩形、椭圆、铅笔、
橡皮擦、颜色选择按钮、线条粗细设置按钮。
整个工具栏是可以拖动的,可以将它拖动到程序窗口的任意位置。
工具栏下面的整个白色区域就是绘图区域,即绘图面板,它的大小可以随着窗口的大小自动调整。
在窗口的最底部是程序设计作者标注,以及鼠标状态提示条,可以显示当前的鼠标状态,包括进出窗口、移动、单击、松开等。
具体效果如下列图所示:
图一功能展示
4.1.3模块算法(或重要代码段):
见附录
4.1.4调试与测试
测试结果的分析与讨论,测试过程中遇到的主要问题及采取的解决措施。
4.2保存打开模块
图2打开保存界面
5小结和展望
作为一名大三的学生,我觉得能做类似的课程设计是十分有意义,而且是十分必要的。
在已度过的大三的时间里我们大多数接触的是专业基础课。
我们在课堂上掌握的仅仅是专业基础课的理论面,如何去锻炼我们的实践面?
如何把我们所学到的专业基础理论知识用到实践中去呢?
我想做类似的大作业就为我们提供了良好的实践平台。
在做本次课程设计的过程中,我感触最深的当数查阅大量的书籍了。
为了让自己的设计更加完善,更加符合软件工程标准,一次次翻阅各种参
考资料是十分必要的,同时也是必不可少的。
我们是在作设计,但我们不是艺术家。
他们可以抛开实际,尽情在幻想的世界里翱翔,我们是软件设计师,一切都要有据可依.有理可寻,不切实际的构想永远只能是构想,永远无法升级为设计。
作为一名学生掌握一门或几门程序设计语言是必不可少的,由于本次课程设计要求用java进行开发,在这过程中我对各种的开发环境进行了探索,其中有c++等,这使我对java的集成开发环境有了更深刻的理解虽然去从未独立应用过它们,但在学习的过程中带着问题去学我发现效率好高,记得大一学c语言好难就是因为我们没有把自己放在使用者的角度,单单是为了学而学,这样效率当然不会高。
边学边用这样才会提高效率,这是我作本次课程设计的第二大收获。
但是由于水平有限,难免会有错误,还望老师批评指正。
参考文献
[1]昊斯特曼;叶乃文,邝劲筠,杜永平译.Java核心技术卷,卷Ⅰ:
基础知识北京:
机械工业出版社,2008.5
[2]陈明.《Java语言程序设计课程实践》,北京:
清华大学出版社,2009
[3]刘宝林.java程序设计与案例,北京:
高等教育出版社,2004.11
附录
使用说明书
1.绘制基本图形
基本图形包括以下几种:
铅笔:
自由画线,图标为:
。
直线:
绘制直线,图标为:
。
矩形:
绘制矩形,图标为:
。
椭圆:
绘制椭圆,图标为:
。
橡皮擦:
使用橡皮工具,图标为:
。
填充:
复选框中选定则画实心图形,图标为:
。
粗细:
粗细滑条图标:
。
程序代码:
importjava.awt.BasicStroke;
importjava.awt.BorderLayout;
importjava.awt.Color;
importjava.awt.Container;
importjava.awt.Cursor;
importjava.awt.Graphics;
importjava.awt.Graphics2D;
importjava.awt.Point;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.awt.event.MouseAdapter;
importjava.awt.event.MouseEvent;
importjava.awt.event.MouseMotionAdapter;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileNotFoundException;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.ObjectInputStream;
importjava.io.ObjectOutputStream;
importjava.io.Serializable;
importjava.util.ArrayList;
importjavax.swing.ImageIcon;
importjavax.swing.JButton;
importjavax.swing.JCheckBox;
importjavax.swing.JColorChooser;
importjavax.swing.JFileChooser;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JMenu;
importjavax.swing.JMenuBar;
importjavax.swing.JMenuItem;
importjavax.swing.JOptionPane;
importjavax.swing.JPanel;
importjavax.swing.JSlider;
importjavax.swing.JToolBar;
importjavax.swing.event.ChangeEvent;
importjavax.swing.event.ChangeListener;
publicclassMain{
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
DrawingBoarddrawingBoard=newDrawingBoard();
drawingBoard.setVisible(true);
}
}
/*创建窗口*/
classDrawingBoardextendsJFrame{
/**
*
*/
privatestaticfinallongserialVersionUID=8085201543530168645L;
privateImageIcon[]image={newImageIcon("按钮1.gif"),
newImageIcon("按钮2.gif"),newImageIcon("按钮3.gif"),
newImageIcon("按钮4.gif"),newImageIcon("按钮5.gif"),
newImageIcon("按钮6.gif")};
privateString[]buttonStrings={"直线","矩形","椭圆","铅笔","橡皮擦","颜色"};
privateString[]tipStrings={"绘制直线","绘制矩形","绘制椭圆","自由画线","使用橡皮工具","选择颜色"};//按钮提示
//创建窗口类组件的引用
privateJMenuBarmenuBar;//创建菜单条
privateJToolBartoolBar;//创建工具条
privateJButton[]buttons;//创建按钮数组
privateJLabelstatusBar;//创建状态栏
DrawingAreadrawingArea;//创建绘图区域
JCheckBoxfillCheckBox;//创建填充
JSliderstrokeSlider;//创建滑条
ArrayList
privateinttype=0;//1为矩形改成2就是椭圆
privateColorcolor=Color.BLACK;
privatefloatstroke=1.0f;
privatebooleanfill=false;//true就是实心
privatePointstart=newPoint(0,0);
privatePointend=newPoint(0,0);
privateElementelement;//当前图形对象
publicDrawingBoard(){
super("我的画板");
setSize(800,600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//菜单栏
menuBar=newJMenuBar();
JMenufileMenu=newJMenu("文件");
JMenueditMenu=newJMenu("编辑");
JMenusetMenu=newJMenu("设置");
/*在菜单栏添加菜单*/
menuBar.add(fileMenu);
menuBar.add(editMenu);
menuBar.add(setMenu);
JMenuItemnewItem=newJMenuItem("新建");
JMenuItemsaveItem=newJMenuItem("保存...");
JMenuItemopenItem=newJMenuItem("打开...");
JMenuItemexitItem=newJMenuItem("退出");
/*菜单栏上加菜单项*/
fileMenu.add(newItem);
fileMenu.add(saveItem);
fileMenu.add(openItem);
fileMenu.addSeparator();
fileMenu.add(exitItem);
/*创建编辑的菜单项*/
JMenuItemundoItem=newJMenuItem("撤销");
editMenu.add(undoItem);//添加到编辑菜单下
//设置、颜色菜单项
JMenuItemcolorItem=newJMenuItem("颜色");
setMenu.add(colorItem);
setJMenuBar(menuBar);//set框架条是哪一个
//新建
newItem.addActionListener(newActionListener(){
@Override
publicvoidactionPerformed(ActionEvente){
//TODOAuto-generatedmethodstub
elements.clear();
drawingArea.repaint();//当图形对象发生改变,我们需要重新绘制图形
}
});
//退出
exitItem.addActionListener(newActionListener(){
@Override
publicvoidactionPerformed(ActionEvente){
//TODOAuto-generatedmethodstub
System.exit(0);
}
});
//撤销
undoItem.addActionListener(newActionListener(){
@Override
publicvoidactionPerformed(ActionEvente){
//TODOAuto-generatedmethodstub
elements.remove(elements.size()-1);
drawingArea.repaint();//当图形对象发生改变,我们需要重新绘制图形
}
});
//保存文件
saveItem.addActionListener(newActionListener(){
@Override
publicvoidactionPerformed(ActionEvente){
//TODOAuto-generatedmethodstub
saveFile();
}
});
//打开文件
openItem.addActionListener(newActionListener(){
@Override
publicvoidactionPerformed(ActionEvente){
//TODOAuto-generatedmethodstub
loadFile();
drawingArea.repaint();//当图形对象发生改变,我们需要重新绘制图形
}
});
//颜色监听器
colorItem.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
chooseColor();//如果被触发,则调用选择颜色函数段
}
});
//线条菜单
JMenuItemstrokeItem=newJMenuItem("线条");
strokeItem.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
setStroke();
}
privatevoidsetStroke(){
//TODOAuto-generatedmethodstub
}
});
setMenu.add(strokeItem);
menuBar.add(setMenu);
//帮助
JMenuhelpMenu=newJMenu("帮助");
JMenuItemaboutItem=newJMenuItem("请联系我");
aboutItem.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
JOptionPane.showMessageDialog(null,
"湖南科技学院\n彭波\n\n学号:
201005002211\n电话:
***********\n",
"帮助",JOptionPane.INFORMATION_MESSAGE);
}
});
helpMenu.add(aboutItem);
menuBar.add(helpMenu);
//工具栏
Containercontainer=getContentPane();//获取
buttons=newJButton[buttonStrings.length];//创建按钮数组
toolBar=newJToolBar(JToolBar.H
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 课程设计