java画图课程设计正式版Word文件下载.docx
《java画图课程设计正式版Word文件下载.docx》由会员分享,可在线阅读,更多相关《java画图课程设计正式版Word文件下载.docx(22页珍藏版)》请在冰豆网上搜索。
源程序..........................................................9
1设计内容及要求
1.1设计内容
学习了《Java面向对象编程》的课程,为了更进一步的提高我们对Java的深入学习,进行了课程设计,我所选择课程设计是利用Java的GUI实现画图应用程度。
其目的是通过本课程设计使我们能够较全面的掌握面向对象程序设计的有关概念和开发方法,以便能较全面地理解、掌握和综合运用所学的知识,提高自身的编程能力。
(1)程序的功能应具备
1)利用Java设计一个画图应用程序;
2)可绘制直线、曲线、椭圆、矩形;
3)可改变线条颜色;
4)可完成图形文件的保存、打开功能。
1.2设计任务及具体要求
主要利用java语言设计开发一个小型的画图应用程序,至少具有如下功能:
可以进行绘画,有颜色的选择、可以绘制直线曲线椭圆,矩形、可以保存。
操作界面要符合用户的一般习惯,图形或文本界面都可以。
要求:
明确课程设计的目的,能根据课程设计的要求,查阅相关文献,为完成设计准备必要的知识;
提高学生用高级语言进行程序设计的能力。
2概要设计
画图应用程序功能介绍
画图应用程序其实质也就是一个简单的画图板。
画图板的应用简单灵巧,其占用资源少、操作简单;
可以实现一些简单的画图应用操作。
其功能较少但是可以为用户的小型图形应用工作带来了很多便利。
能实现简单的作图如:
画直线、曲线、椭圆、矩形等;
也可以实现图像保存、打开、选择颜色等功能。
3设计过程或程序代码
3.1程序实现流程
(1)首先是了解画图应用程序的需求,进行程序的“需求分析”;
在了解其需求基本上再作比较详细的程序规划。
(2)程序规划时需要建立所需文档资料,说明各个程序模块所要实现的功能是什么。
再深入了解和分析需求,举例出相关的界面和界面功能。
(3)根据确认的所需求文档列举的界面和功能需求,用迭代的方式对每个界面或功能做系统的概要设计。
(4)程序员根据所写的需求设计文档进行程序的代码编写,一个一个的实现其相应的编写。
(5)测试编写好的程序。
并补充和完善其相应的程序功能遗漏点,最后验收。
3.2程序算法设计
(1)if…else…和for等语句进行判断其用户选择的相应的功能和现实相应的循环,在调用选择的按钮键的功能。
(2)定义很多公共鼠标类监听鼠标的各种操作。
3.3程序重点核心代码简介
(1)画图应用程序的“选择颜色”代码。
⏹先判断其用户是否选择“选择颜色”。
当用户选择了“选择颜色”则弹出选色界面对话框提供用户“选择颜色”。
if(e.getActionCommand().equals("
选择颜色"
))
{
JColorChooserjc=newJColorChooser();
linecolor=jc.showDialog(null,"
请选择颜色"
Color.BLACK);
lcolor.setForeground(linecolor);
}
(2)画图应用程序的“保存”和“打开”代码。
⏹先是判断选择“保存”或“打开”功能,再实现相应的功能。
保存"
{style=5;
JFileChoosersfc=newJFileChooser();
intflag=-1;
try{//这里将显示保存文件的对话框
flag=sfc.showSaveDialog(this);
}
catch(HeadlessExceptionhe)
{System.out.println("
SaveFileDialogException!
"
);
if(flag==JFileChooser.APPROVE_OPTION)
{//获取选择文件的路径
Stringfilename=sfc.getSelectedFile().getPath();
try{FileOutputStreamfos=newFileOutputStream(filename);
ObjectOutputStreamoos=newObjectOutputStream(fos);
oos.writeObject(thedraw);
oos.close();
}
catch(Exceptiones)
{System.out.println(es);
}
elseif(e.getActionCommand().equals("
打开"
{style=5;
JFileChooserofc=newJFileChooser();
intreturnVal=ofc.showOpenDialog(this);
if(returnVal==JFileChooser.APPROVE_OPTION)
{Stringfilename=ofc.getSelectedFile().getPath();
try{//获取选择文件的路径
FileInputStreamfis=newFileInputStream(filename);
ObjectInputStreamois=newObjectInputStream(fis);
thedraw=(Vector<
position>
)ois.readObject();
ois.close();
}
catch(Exceptiones)
}
repaint();
(3)画图应用程序画图后鼠标“画图轨迹”记录存储。
publicvoidmouseDragged(MouseEvente)
{//记录画图轨迹
positionp=newposition();
p.x=e.getX();
p.y=e.getY();
p.type=style;
p.color=linecolor;
thedraw.add(p);
repaint();
3.4程序按钮功能核心代码列表
⏹画直线:
Line2Dt=newLine2D.Double(x1,y1,x2,y2);
⏹画矩形:
Rectangle2Dt=newRectangle2D.Double(x1,y1,x2-x1,y2-y1);
⏹画曲线:
Arc2Dt=newArc2D.Double(x1,y1,x2-x1,y2-y1,20,90,Arc2D.OPEN);
⏹画椭圆:
Ellipse2Dt=newEllipse2D.Double(x1,y1,x2-x1,y2-y1);
3.5程序运行界面截图
源代码成功通过编译后的运行结果,结果如下图:
上图为Java语言编程所实现的画图应用程序“用户界面”。
(1)画图应用程序之基本功能(直线、曲线、矩形、椭圆)功能实现,如下图标识:
(2)画图应用程序之画笔的颜色选择功能:
其提供了三种选择“样本”、“HSB”、“RGB”的颜色选择方式。
(3)画图应用程序之保存功能实现。
如下图:
⏹将“三毛站岗”图保存到“桌面”。
(4)画图应用程序之打开功能实现。
4设计结果与分析
当把程序写好并进行调试时,并不是一帆风顺的,在程序编译过程中遇到了许许多多的大大小小的错误,经过一次又一次的改正错误最终完成了程序设计
(1)画图应用程序的Java源代码全部正确能够通过编译并正常运行。
(2)画图应用程序要求的功能:
画直线、曲线、矩形、椭圆、保存、打开、画笔选择颜色等功能都以完全实现。
(3)通过Java编程完全实现了课程设计任务书的全部功能。
5小结
经过一周多时间的奋斗,这次java的课程设计终于做完了。
通过这次课程设计使我在挫折中学到了很多的东西。
在编程前,我都是进行了一下分析,考虑在整个程序中需要什么函数,对每个函数我都进行了研究,并且参考了课本和资料。
在编完整个程序后,进行调试,发现了很多的错误,我经过无数次的改善,修改错误,总算使其能进行正确的运行。
通过本次的课程设计,我们深深体会到java中类的重要性。
了解典型类的性质是非常有用的,他往往是编写程序的关键。
与此同时,我逐渐提高了自己的程序设计和调试能力,我发现在面对较难处理的编程问题时,可以先分割成许多小的部分,然后再整合起来,整合的过程是十分重要的;
另外,清晰的思路和理性的方法是处理问题的关键。
相信在越来越多的尝试之后,自己会不断进步和提高。
在此我要感谢齐敏菊老师对我的指引和帮助。
由于我的知识浅薄,经验不足及阅历颇浅,在该系统的设计方面还有很多不多不足,比如功能过少,界面不醒目等问题,我会在以后的学习过程中,根据具体要求不断的修改、完善,争取使系统慢慢趋于完美。
参考文献
[1]牛晓太.《Java程序设计教程》清华大学出版
[2]陈国君等.《Java程序设计基础》(第二版).清华大学出版社
[3]Deitel.《Java大学基础教程》(第六版).电子工业出版社
[4]MaryCampione.《Java语言导学》(第四版).机械工业出版社
[5]Y.DanielLiang.《Java语言程序设计基础篇》(第六版).机械工业出版社
[6]KathySierra.《HeadFirstJava》(第二版).东南大学出版社
源程序
importjava.awt.*;
importjava.awt.event.*;
importjava.awt.geom.*;
importjavax.swing.*;
importjava.io.*;
importjava.util.Vector;
//定义监听窗口
publicclassDrawProject
{
publicstaticvoidmain(String[]args)
DrawFrameframe=newDrawFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}
//图像界面的大小及调用
classDrawFrameextendsJFrame
publicstaticfinalintWIDTH=800;
publicstaticfinalintHEIGHT=600;
publicDrawFrame()
{
setTitle("
JAVA画图本"
setSize(WIDTH,HEIGHT);
DrawPanelpane1=newDrawPanel();
ContainercontentPane=getContentPane();
contentPane.add(pane1,"
Center"
}
classpositionimplementsSerializable
{
intx;
inty;
inttype;
Colorcolor;
//创建内部类作监视器
classDrawPanelextendsJPanelimplementsActionListener,MouseListener,MouseMotionListener
publicJButtonanj0,anj1,anj2,anj3,anj4,anj5,anj6,anj7,anj8;
//按钮
JPaneljp;
//工具栏
JLabellcolor;
//显示画笔颜色
Vector<
thedraw=newVector<
();
//保存画图轨迹的数组
intstyle=-1;
//画图类型
intx1=0;
intx2=0;
//保存点的坐标
inty1=0;
inty2=0;
Colorlinecolor=Color.BLACK;
//线的颜色
publicDrawPanel()
{
super();
this.setBackground(Color.WHITE);
this.setLayout(newBorderLayout());
jp=newJPanel();
jp.setBackground(Color.LIGHT_GRAY);
add(jp,BorderLayout.WEST);
jp.setLayout(newBoxLayout(jp,BoxLayout.Y_AXIS));
//加入工具栏的组件
lcolor=newJLabel("
■■■■■■"
anj0=newJButton("
画笔"
anj1=newJButton("
矩形"
anj2=newJButton("
椭圆"
anj3=newJButton("
直线"
anj4=newJButton("
曲线"
anj5=newJButton("
anj6=newJButton("
anj7=newJButton("
清空"
anj8=newJButton("
//工具栏顺序
jp.add(anj0);
jp.add(anj3);
jp.add(anj4);
jp.add(anj1);
jp.add(anj2);
jp.add(anj8);
jp.add(lcolor);
jp.add(anj7);
jp.add(anj5);
jp.add(anj6);
anj0.addActionListener(this);
anj1.addActionListener(this);
anj2.addActionListener(this);
anj3.addActionListener(this);
anj4.addActionListener(this);
anj5.addActionListener(this);
anj6.addActionListener(this);
anj7.addActionListener(this);
anj8.addActionListener(this);
addMouseListener(this);
addMouseMotionListener(this);
//记录鼠标选择的功能
publicvoidactionPerformed(ActionEvente)
if(e.getActionCommand().equals("
style=0;
style=1;
style=2;
style=3;
style=4;
elseif(e.getActionCommand().equals("
thedraw.removeAllElements();
style=7;
style=5;
try{
//这里将显示保存文件的对话框
{
System.out.println("
if(flag==JFileChooser.APPROVE_OPTION)
//获取选择文件的路径
try{
FileOutputStreamfos=newFileOutputStream(filename);
}catch(Exceptiones){
System.out.println(es);
}
style=5;
JFileChooserofc=newJFileChooser();
if(returnVal==JFileChooser.APPROVE_OPTION){
Stringfilename=ofc.getSelectedFile().getPath();
catch(Exceptiones){
//从数组中取出一个点后画图
publicvoiddraw(Graphics2Dg)
intn=thedraw.size();
positionp;
for(inti=0;
i<
n;
i++)
try
{
p=thedraw.get(i);
if(p.type==0)
{
x1=x2=p.x;
y1=y2=p.y;
while(p.type==0)
{
x2=p.x;
y2=p.y;
Line2Dt=newLine2D.Double(x1,y1,x2,y2);
g.setColor(p.color);
g.draw(t);
i++;
if(i==n){
i--;
break;
}
p=thedraw.get(i);
x1=x2;
y1=y2;
}
if(p.type==1)
x1=p.x;
y1=p.y;
i++;
p=thedraw.get(i);
x2=p.x;
y2=p.y;