JAVA画图工具全解.docx
- 文档编号:11708379
- 上传时间:2023-06-02
- 格式:DOCX
- 页数:24
- 大小:60.58KB
JAVA画图工具全解.docx
《JAVA画图工具全解.docx》由会员分享,可在线阅读,更多相关《JAVA画图工具全解.docx(24页珍藏版)》请在冰点文库上搜索。
JAVA画图工具全解
摘要
随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。
JAVA是一门很优秀的编程语言,具有面向对象、与平台无关、安全、稳定和多线程等特点,是目前软件设计中极为健壮的编程语言。
JAVA不仅可以用来开发大型的应用程序。
而且特别适合Internet的应用开发。
JAVA确实具备“一次写成,处处运行”的特点,JAVA以成为网络时代最重要的编程语言之一。
本报告中介绍了用JAVA语言实现画笔系统的全部过程。
本次课程设计是配合JAVA程序设计课程,帮助我们深入学习掌握JAVA语言,熟练运用这个工具来编写的。
通过课程设计各个项目的综合训练,培养学生实际分析问题、编程和动手能力、提高学生的综合素质。
本课程设计尝试使用一些较生动的示例和设计项目,激发学生学习兴趣,引导学生主动学习,正确理解、接受需要重点掌握的知识点,为参加项目开发及更深入学习做好准备。
本次课程设计主要是用JAVA实现画笔系统,其系统主要完成以下功能:
设计一个画图程序,能够实现画笔、画直线、画圆形、画矩形、修改该画笔的大小以及颜色。
该画图程序还需具有橡皮擦功能以及清空整个画面的功能
关键词:
画图工具,JAVA
目录
摘要2
目录3
1.绪论4
2.开发环境介绍5
3.需求分析6
3.1总体目标6
3.2要实现的功能..................................................7
4.概要设计........................................................8
4.1设计准备......................................................8
4.2需要用到的类..................................................8
5.详细设计.........................................................9
5.5类的设计.....................................................9
5.2类的方法设计..................................................9
6.测试数据及运行结果10
7.总结............................................................15
8.参考文献........................................................15
9.源程序..........................................................15
1.绪论
Java不依赖平台的特点使它受到广泛的关注,Java已成为网络时代最重要的语言之一。
目前,Java语言不仅是一门被广泛使用的编程语言,而且已成为软件设计开发者应当掌握的一门基础语言。
因为很多新的技术领域都涉及到Java语言,国内外许多大学已将Java语言列入本科教学计划,而IT行业对Java人才的需求也在不断的增长,因此,掌握Java已经成为共识。
Java是一门说简单也不简单,说难也不难的课程。
所以,我们在学习的过程中要根据自己的具体情况,合理安排编程训练时间,相信编程能力会在不知不觉中得到提高。
在此次的课程设计实践中,我学到了教科书上没有的东西。
这次课程设计,我按照课程设计的要求,分块实现程序的功能。
在实践中我遇到许多的问题,但我都克服,最终我成功的完成了这次课程设计。
从中我充分理解了Java面对对象的特性,并体会到Java与C语言的不同之处
在实践的同时,我又从中成长了许多,特别是在对程序的编译和调试中掌握了许多的技巧和方法,为今后的其他计算机语言的学习奠定了一定的基础
2.开发环境介绍
该项目所使用的软件开发环境如下:
操作系统:
Windowsxp开发工具:
eclipse3.2及其VE插件Eclipse简介Eclipse是一个开放源代码的、基于Java的可扩展开发平台。
就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。
幸运的是,Eclipse附带了一个标准的插件集,包括Java开发工具。
Eclipse是著名的跨平台的自由集成开发环境(IDE)。
最初主要用来Java语言开发,但是目前亦有人通过插件使其作为其他计算机语言比如C++和Python的开发工具。
Eclipse的本身只是一个框架平台,但是众多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性。
许多软件开发商以Eclipse为框架开发自己的IDE。
Eclipse最初由OTI和IBM两家公司的IDE产品开发组创建,起始于1999年4月。
IBM提供了最初的Eclipse代码基础,包括Platform、JDT和PDE。
目前由IBM牵头,围绕着Eclipse项目已经发展成为了一个庞大的Eclipse联盟,有150多家软件公司参与到Eclipse项目中,其中包括Borland、RationalSoftware、RedHat及Sybase等。
Eclipse是一个开发源码项目,它其实是VisualAgeforJava的替代品,其界面跟先前的VisualAgeforJava差不多,但由于其开放源码,任何人都可以免费得到,并可以在此基础上开发各自的插件,因此越来越受人们关注。
近期还有包括Oracle在内的许多大公司也纷纷加入了该项目,并宣称Eclipse将来能成为可进行任何语言开发的IDE集大成者,使用者只需下载各种语言的插件即可。
3.需求分析
3.1要实现的功能
(1)完成画线、画直线、画矩形、画圆及擦除(橡皮擦功能)
(2)可以设置画笔颜色
(3)可以设置画笔宽度
(4)使用面向对象的方法
4.概要设计
4.1设计准备
1、此程序为实现这些功能模块,必须首先定义一个工具面板,将这些画笔、画
箭头、椭圆、圆、多边形直线、画矩形、画笔颜色、画笔大小、橡皮等功能组件放入这个工具面板中。
2、此程序为实现利用鼠标做画笔的功能,必会产生鼠标事件MouseEvent。
因此,为实现鼠标画图的功能,必须用到鼠标触发事件,故在此程序中,必须实现“委托事件模型”,用到事件源、事件对象以及监听者对象。
3、此程序中,必须用到的包如下:
importjava.awt.*;
importjavax.swing.*;
importjava.awt.event.*;
4.2需用到的类
1)classMycanvas
此类用于定义一组数据成员,并且使用构造函数将他们分别初使化,以方便在下面的程序中使用他们。
2)classMyframe
此类用于实现这个程序的大部分功能,在这个类中除了定义一些基本变量以及构造函数外,还定义了很多成员方法,这些成员方法将实现鼠标触发事件的一系列绘图功能。
3)publicclassText
这个类是主类,是程序得以运行的入口。
在这个主类中定义了主方法,是该程序执行的入口。
5.详细设计
5.1类的设计
1)classMycanvas
在这个类中定义了用于截断的一系列标志变量,有初始坐标、颜色、工具选择等,并且在这个类中还定义了构造函数voidsetx1(intx1){},用于完成对这些变量的初始化工作。
2)classMyframe
这个类用来实现整个程序的大部分功能,并且在这个类中定义了大部分的成员函数和成员方法,在这个类中用到的主要成员方法如下:
publicvoidactionPerformed(ActionEvente){}
publicvoiditemStateChanged(ItemEvente){}
publicvoidmousePressed(MouseEvente){}
publicvoidmouseRelesed(MouseEvente){}
publicvoidmouseEntered(MouseEvente){}
publicvoidmouseExited(MouseEvente){}
publicvoidmouseClicked(MouseEvente){}
publicvoidmouseDragged(MouseEvente){}
publicvoidmouseMoved(MouseEvente){}
5.2类的方法介绍
1定义的变量:
在这个类中,首先定义了画笔的大小、画笔的颜色、画笔的粗细、橡皮的大小、工具的选择等一些变量,并且还用到了系统中自带的一些类初使化了一些面板工具对象,用于完成对面板工具、画直线、画椭圆、画矩形、橡皮擦、清除等一些工具按钮的定义。
2初使化构造函数:
在这个初使化构造函数中,首先继承了父类Frame,然后初使化了各工具按钮以及各个选择项,包括颜色选择、画笔大小选择、橡皮大小选择,并且将这些组件添加到了工具面板中,最后还对各个组件注册了事件监听者对象。
3paint()方法:
这个方法主要用于在Applet的界面中显示文字、图形和其它界面元素。
本程序中,在这个方法中,定义了一些工具选项设置,给用户选择画笔、画直线、画圆、橡皮擦等一些功能。
4itemStateChanged()方法:
这个方法用来实现的功能很简单,主要是用来改变画笔大小、画笔颜色、橡皮大小的。
在此方法中,设置了大小以及颜色的一些预选项,以供用户对大小以及颜色做出选择。
5mouseDragged()方法:
此方法是处理MouseEvent事件以实现MouseMotionListener接口的对象。
MouseMotionListener是事件监听者,mouseDragged(MouseEvente)是成员方法,代表鼠标拖动事件,在这个方法中,还用到了MouseEvent类常用成员方法:
publicintgetX()以及publicintgetY(),用来返回发生鼠标事件的X及Y的坐标。
这个方法中,主要用来控件画笔和橡皮的转换。
6mousePressed()方法:
此方法是处理MouseEvent事件以实现MouseListener接口的对象。
MouseListener是事件监听者,mouseDPressed(MouseEvente)是成员方法,代表鼠标按下事件。
这个方法主要用来控件用户画直线、画圆、画矩形这些功能之间的转换。
⑦mouseReleased()方法:
mouseEntered()方法:
mouseExited()方法:
mouseClicked()方法:
这些方法和mousePressed()方法属于同一类,他主要用来表示鼠标释放事件,是对上述各个功能完成后对鼠标事件的又一次触发。
3、画直线、画圆、画矩形
7.总结
此软件基本达到理想效果,在编写这一软件的过程中我学到了很多java编程知识,并学会了如何快速的改正程序中的错误。
在本次java课程设计中,我收获了很多。
特别是在编写java程序时,必须先对程序的功能进行初步的分析,得到程序中每一个功能所需要用到的方法或思路,同时根据功能的相似来设计一类功能的实现,并通过某些语句的改变达到多功能效果。
这次课程设计使我受益匪浅,锻炼了我做事坚持不懈的心态,也使我的自学能力也有了一定的提高,我更明白了搞计算机这行,要学到真正的技术完全要靠自己,在课堂上只能学到最基本的东西,但这最基本的东西也一定要学好。
8.参考文献
《java2实用教程》耿祥于、张跃平编著
清华大学出版社
9.源程序
packagesdrc;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
classMycanvasextendsCanvas{
intx1,y1,x2,y2,x3,y3,r;intd=3;
inthuabi=1;
doublex[]=newdouble[8],y[]=newdouble[8];
intx4[]=newint[8],y4[]=newint[8];
DoubleX[]=newDouble[8],Y[]=newDouble[8];
Colorc;
Mycanvas()
{
setBackground(Color.white);
}
voidsetx1(intx1){
this.x1=x1;
}
voidsety1(inty1){
this.y1=y1;
}
voidsetx2(intx2){
this.x2=x2;
}
voidsety2(inty2){
this.y2=y2;
}
voidsetx3(intx3){
this.x3=x3;
}
voidsety3(inty3){
this.y3=y3;
}
voidsetcolor(Colorc)
{
this.c=c;
}
voidsetarc(intd)
{
this.d=d;
}
voidsetr(inte)
{
r=e;
}
voidsethuabi(inthuabi)
{
this.huabi=huabi;
}
publicvoidpaint(Graphicsg,inti)
{
g.setColor(c);
Graphics2Dg_2d=(Graphics2D)g;
BasicStrokebs=newBasicStroke(huabi,BasicStroke.CAP_ROUND,BasicStroke.JOIN_MITER);
g_2d.setStroke(bs);
if(i==1)
{
g.drawOval(x1,y1,x2,y2);
}
elseif(i==2)
{
g.drawLine(x1,y1,x2,y2);
}
elseif(i==3)
{
g.drawRect(x1,y1,x2,y2);
}
}
publicvoidPaint(Graphicsg)
{
Graphics2Dg_2d=(Graphics2D)g;
BasicStrokebs=newBasicStroke(huabi,BasicStroke.CAP_ROUND,BasicStroke.JOIN_MITER);
g_2d.setStroke(bs);
for(inti=0;i { X[i]=newDouble(x[i]); x4[i]=X[i].intValue(); Y[i]=newDouble(y[i]); y4[i]=Y[i].intValue(); } for(inti=0;i { g.drawLine(x4[i%d],y4[i%d],x4[(i+1)%d],y4[(i+1)%d]); } } publicvoidpaintk(Graphicsg){ g.setColor(c); Graphics2Dg_2d=(Graphics2D)g; BasicStrokebs=newBasicStroke(huabi,BasicStroke.CAP_ROUND,BasicStroke.JOIN_MITER); g_2d.setStroke(bs); doubleH=10; doubleL=7; intx3=0; inty3=0; intx4=0; inty4=0; doubleawrad=Math.atan(L/H); doublearraow_len=Math.sqrt(L*L+H*H); double[]arrXY_1=rotateVec(x2-x1,y2-y1,awrad,true,arraow_len); double[]arrXY_2=rotateVec(x2-x1,y2-y1,-awrad,true,arraow_len); doublex_3=x2-arrXY_1[0];//(x3,y3)是第一端点 doubley_3=y2-arrXY_1[1]; doublex_4=x2-arrXY_2[0];//(x4,y4)是第二端点 doubley_4=y2-arrXY_2[1]; DoubleX3=newDouble(x_3); x3=X3.intValue(); DoubleY3=newDouble(y_3); y3=Y3.intValue(); DoubleX4=newDouble(x_4); x4=X4.intValue(); DoubleY4=newDouble(y_4); y4=Y4.intValue(); //g.setColor(SWT.COLOR_WHITE); //画线 g.drawLine(x1,y1,x2,y2); g.drawLine(x2,y2,x3,y3); g.drawLine(x2,y2,x4,y4); } publicdouble[]rotateVec(intpx,intpy,doubleang,booleanisChLen,doublenewLen){ doublemathstr[]=newdouble[2]; doublevx=px*Math.cos(ang)-py*Math.sin(ang); doublevy=px*Math.sin(ang)+py*Math.cos(ang); if(isChLen){ doubled=Math.sqrt(vx*vx+vy*vy); vx=vx/d*newLen; vy=vy/d*newLen; mathstr[0]=vx; mathstr[1]=vy; } returnmathstr; } } classMyframeextendsFrameimplementsActionListener,ItemListener,MouseListener,MouseMotionListener{ Mycanvascanvas; Graphicsg; intx,y,z,r; intp,q; intflag=0; intxiangpi=4; inthuabi=1; Panelpanel1,panel2,panel3; Labellabel1,label2,label3,label5,label6; Buttonb1,b2,b3,b4,b6,b7,b8,b9; TextFieldt1,t2,t3,t4,t5,t6,t7; BoxbaseBox,box1,box2,box3; Choicechoice,choice2,choice3; Myframe(){ super("画图工具"); canvas=newMycanvas(); choice=newChoice(); choice2=newChoice(); choice3=newChoice(); label1=newLabel("操作"); label2=newLabel("参数"); label3=newLabel("颜色"); label5=newLabel("橡皮擦"); label6=newLabel("画笔"); panel1=newPanel(); panel2=newPanel(); panel3=newPanel(); b1=newButton("圆"); b2=newButton("椭圆"); b3=newButton("直线"); b4=newButton("矩形"); b6=newButton("清除"); b7=newButton("退出"); b8=newButton("橡皮擦"); b9=newButton("绘画"); t1=newTextField(5); t2=newTextField(5); t3=newTextField(5); t4=newTextField(5); choice.add("红"); choice.add("绿"); choice.add("蓝"); choice.add("黄"); choice.add("青"); choice.add("橙"); choice.add("黑"); choice2.add("4"); choice2.add("10"); choice2.add("20"); choice2.add("50"); choice2.add("100"); choice2.add("200"); choice3.add("1"); choice3.add("3"); choice3.add("8"); choice3.add("10"); choice3.add("13"); choice3.add("16"); b1.addActionListener(this); b2.addActionListener(this); b3.addActionListener(this); b4.addActionListener(this); b6.addActionListener(this); b7.addActionListener(this); b8.addActionListener(this); b9.addActionListener(this); choice.addItemListener(this); choice2.addItemListener(this); choice3.addItemListener(thi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA 画图 工具
![提示](https://static.bingdoc.com/images/bang_tan.gif)