




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目 录1. 程序设计内容概论··········································11.1程序设计的目的····
2、;·····································11.2程序设计的任务···········
3、······························12 设计思想···················
4、;·······························12.1需求分析·················
5、83;·····························12.2总体设计···················&
6、#183;···························12.2.1面板布局 ····················
7、183;····················12.2.2实现绘画图形···························
8、183;··········22.2.3填充功能·····································
9、3;····22.2.4画笔的粗细及画笔的颜色变更························22.2.5实现鼠标单击和鼠标拖拽进行绘图···············
10、·····22.3编程环境···········································
11、3;···32.4.工具说明·············································&
12、#183;33 系统流程················································
13、···44 设计uml类图·············································
14、183;55 设计层次结构树············································66 运行结果与分析··
15、··········································77 设计总结·······
16、;···········································128.参考文献·····
17、83;············································139.附录····
18、83;················································141 程序设计内
19、容概论1.1程序设计的目的 本程序是一个利用gui方法实现简单绘图功能的应用程序。1.2程序设计的任务程序主要创建了5个jradiobutton, 1个jcheckbox,2个jbutton以及一个jslider用于选择绘画功能操作。接着创建三个面板用于设计绘图的整体画板,并利用按钮监听器,滑动条和鼠标操作实现在面板上绘图的简单功能。在程序中,利用创建jradiobutton实现多选一绘画功能,创建jcheckbox实现填充功能,而2个jbutton则分别实现颜色更变和清除画板。同时本程序使用了鼠标点击,鼠标释放和鼠标拖拽来进行画板绘画,利用鼠标点击实现初点坐标获取,在绘画曲线时,主要通过鼠标
20、拖拽实现在画板上不断绘制(不断进行末点坐标赋值初点);在绘画直线时,主要通过鼠标拖拽达到动态效果,并通过鼠标释放最终描绘出直线;在绘画矩形和圆时,主要通过鼠标拖拽达到动态效果,并通过鼠标释放最终描绘出矩形和圆;在绘画粗线时,主要通过不断重画实心圆来实现。 2 设计思想2.1需求分析2.1.1面板布局2.1.2实现绘画图形(曲线,直线,圆,椭圆,矩形)3.1.3填充功能(其中包括圆的填充,椭圆圆的填充,矩形圆的填充)3.1.4画笔的粗细及画笔的颜色变更3.1.5实现鼠标单击和鼠标拖拽进行绘图2.2总体设计2.2.1面板布局主要创建5个jradiobutton, 1个jcheckbox,2个jbu
21、tton以及一个jslider,同时创建三个面板(一个面板用于绘图,一个面板用于把所有按钮及滑动条等添加进去,一个面板用于把已经添加了按钮和滑动条的面板添加进去,用于区分绘图面板和按钮面板的位置),利用盒式布局管理器将所有的组件(包括5个jradiobutton, 1个jcheckbox,2个jbutton以及一个jslider)进行布局,再利用边界布局管理器对面板进行位置编排,绘图面板在中间,另一个在西边。最终完成了画板的布局。2.2.2实现绘画图形(曲线,直线,圆,椭圆,矩形)在实现绘画的功能,主要通过创建buttongroup从而把所有的jradiobutton都添加进去,从而达到在描绘
22、图形时多选一的选择功能;利用按钮监听器,利用object source=event.getsource()语句当source=op1时进行曲线绘画,在实现曲线绘画的功能时,主要利用了鼠标的点击和鼠标的拖拽,通过鼠标的点击来扑捉第一个坐标点,然后利用鼠标的拖拽来不断变换第一个点的坐标(利用sx=x和sy=y语句),从而将所有点都连接起来,最终实现了在画板上描绘曲线的功能;当source=op2时进行直线绘画,在实现直线绘画的功能时,主要利用了鼠标的点击,鼠标的释放和鼠标的拖拽,通过鼠标的点击来扑捉直线的第一个坐标点,然后利用鼠标的拖拽选择直线的另一个点,最终通过鼠标的释放在画板上描绘出直线来;当
23、source=op3时进行圆和椭圆绘画,在实现圆和椭圆绘画的功能时,主要利用了鼠标的点击,鼠标的释放和鼠标的拖拽,通过鼠标的点击来扑捉圆和椭圆的一个坐标点,然后利用鼠标的拖拽选择圆和椭圆的大小,最终通过鼠标的释放在画板上描绘出圆和椭圆来;当source=op4时进行矩形绘画,在实现矩形绘画的功能时,主要利用了鼠标的点击,鼠标的释放和鼠标的拖拽,通过鼠标的点击来扑捉矩形的一个坐标点,然后利用鼠标的拖拽选择矩形的大小,最终通过鼠标的释放在画板上描绘出矩形来。2.2.3填充功能(其中包括圆的填充,椭圆圆的填充,矩形圆的填充)通过jcheckbox创建一个按钮,利用按钮监听器决定是否要描绘填充图形,如
24、果是则将实现赋值fill=true,否则fill=false,然后通过布尔值判断在描绘图形时是draw还是fill,如果布尔值是ture时则实现了图形的填充。2.2.4画笔的粗细及画笔的颜色变更画笔的粗细主要是通过不断地重画填充圆来实现,通过鼠标的拖拽不断地在画板上进行重画;而粗细则由创建的jslider来调节圆的半径, 如果圆的半径越大则所绘出的曲线越粗,反则越细;画笔的颜色变更主要通过创建的jbutton按钮,利用按钮监听器,当按下了按钮,则实现c=jcolorchooser.showdialog(right,"choose",c)语句,从而把初始的画笔颜色(黑色)改变
25、。2.2.5实现鼠标单击和鼠标拖拽进行绘图 通过语句right.addmouselistener和语句addmousemotionlistener(new listen1()来设计在right面板上进行鼠标单击和鼠标拖拽等绘图,通过鼠标的单击(mousepressed)获取图形的第一个点,再利用鼠标的拖拽(mousedragged)选择图形的形状,大小和方向等。2.3编程环境 本次编程的环境为jdk。2.4.工具说明 本次编程工具为ultraedit。3 系统流程开始填充画笔粗细清除颜色粗线按钮矩形按钮画圆按钮直线按钮曲线按钮f=2f=3f=4f=5f=1填充 y nsize 改变fill=f
26、alsefill=true改变颜色输入颜色 y n f=5f=4f=3f=2f=1画出粗线画出矩形画出圆画出直线画出曲线结束画板 4 设计uml类图 drawpanelf:intsx:intsy:intx:inty:intfill:booleanflag:booleanmousepressed():voidmousereleased():voidmousedragged():voidmouseentered():voidmouseexited():voidmouseclicked():voidmousemoved():voidactionperforned():voidstatechanged
27、():voiddraw1main(args:string):void 绘图程序uml类图5 设计层次结构树jframejpanel(border layout)jpanelcenter-rightjpanelwest-left(vertial box layout)jradiobuttonjradiobuttonjradiobuttonjradiobuttonjradiobuttonjcheckboxjbuttonjbuttonjsliderjlabel6 运行结果与分析6.1 整体画板展示画板分析:利用盒式布局管理器将所有的组件(包括5个jradiobutton, 1个jcheckbox,2
28、个jbutton以及一个jslider)进行布局,再利用边界布局管理器对面板进行位置编排,绘图面板在中间(center),另一个在西边(west)。6.2用曲线、直线、圆、矩形画黑白小屋子6.3用粗线写祝福语6.4用填充效果画图6.5.用带有颜色的画笔画图7 设计总结在本次java课程设计中,我设计了一个绘图应用程序。该绘图应用程序实现了画曲线,直线,画圆,画矩形和粗线功能,同时可以实现图形的填充和颜色的变换,另外还设计了一个清除画板按键,可以应用于平时一些简单的画图操作。在本绘图应用程序中,所存在的问题是图形的种类不够完善,未能实现画弧,画多边形等功能,另外一个不足的地方时整个画板只能画一种
29、颜色的图形,未能满足更高要求的绘画需要。在本次java课程设计中,我收获了很多。特别是在编写java程序时,必须先对程序的功能进行初步的分析,得到程序中每一个功能所需要用到的方法或思路,同时根据功能的相似来设计一类功能的实现,并通过某些语句的改变达到多功能效果,例如在本次设计中,分析可得圆和矩形有很大的相似度,利用drawoval和drawrect的变换可以达到绘画的效果。在设计图形的填充时,我参考了本学期所学的jcheckbox方法和判断语句,有效地处理了图形的填充问题,并系统地学习了鼠标拖拽的应用。在本次设计中,最难处理的问题是用鼠标拖拽来画直线,圆和矩形,因为在使用鼠标拖拽时,会出现在画
30、板上不断重画的效果,无法达到自己想要的效果,后来在同学的帮助和参考部分java教科书下,成功了解决了这个问题,而在解决这个问题,使我认识到学习不能只局限于课本,必要时应该要多阅读一些相关的java书籍,从而让自己的知识面更加广,处理问题更加有效率。所以,经过本次编写绘图应用程序,使我把本学期所学的java知识充分地运用到课程设计中来,既提高了自己学习的主动性,同时为自己以后的学习打下了更深的基础。参考文献1 john lewis、willian loftus,java程序设计教程,北京:电子工业出版社,2009;2 杨树林、胡洁萍,java语言最新实用案例教程,北京:清华大学出版社,2006;
31、3 谭浩强,c程序设计,北京:清华大学出版社,2008。附录:import javax.swing.jframe;public class draw1 public static void main (string args) jframe frame = new jframe ("draw"); frame.setdefaultcloseoperation (jframe.exit_on_close); drawpanel draw =new drawpanel(); frame.getcontentpane().add (draw); frame.pack(); fra
32、me.setvisible(true); import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;import java.util.*;import javax.swing.colorchooser.*;public class drawpanel extends jpanel private jpanel p1,right,left; private jradiobutton op1,op2,op3,op4,op5; private jcheckbox c1; priv
33、ate jbutton a,b; private int f=1; private int sx, sy, x,y; private boolean fill=false; private boolean flag=false; private color c; private point point1=null,point2=null; private jslider slider; private jlabel label1; private int size=10; public drawpanel() c =color.black; right = new jpanel(); left
34、 = new jpanel(); p1 = new jpanel(); buttongroup g = new buttongroup(); op1 = new jradiobutton("曲线",true); op2 = new jradiobutton("直线",false); op3 = new jradiobutton("画圆",false); op4 = new jradiobutton("矩形",false); op5 = new jradiobutton("粗线",false);
35、g.add(op1); g.add(op2); g.add(op3); g.add(op4); g.add(op5); c1 = new jcheckbox("填充"); a=new jbutton("颜色"); b=new jbutton("清除"); slider =new jslider(jslider.vertical,0,25,10); slider.setmajortickspacing(5); slider.setminortickspacing(1); slider.setpaintticks(true); slide
36、r.setpaintlabels(true); slider.setalignmentx(component.left_alignment); label1 =new jlabel("size:10"); label1.setalignmentx(component.left_alignment); p1.setlayout(new boxlayout(p1,boxlayout.y_axis); p1.add(op1); p1.add(op2); p1.add(op3); p1.add(op4); p1.add(op5); p1.add(c1); c1.addactionl
37、istener(new listen3(); p1.add(a); p1.add(box.createrigidarea(new dimension(0,10); p1.add(b); a.addactionlistener(new listen4(); b.addactionlistener(new listen5(); p1.add(slider); slider.addchangelistener(new listen6(); p1.add(label1); left.add(p1); right.setbackground(color.white); op1.addactionlist
38、ener(new listen2(); op2.addactionlistener(new listen2(); op3.addactionlistener(new listen2(); op4.addactionlistener(new listen2(); op5.addactionlistener(new listen2(); right.addmouselistener(new listen1(); right.addmousemotionlistener(new listen1(); setlayout(new borderlayout(); add(right,"cent
39、er"); add(left,"west"); setbackground(color.white); setpreferredsize(new dimension(500,450); private class listen1 implements mouselistener,mousemotionlistener public void mousepressed(mouseevent event) flag=false; point1=event.getpoint(); sx=point1.x; sy=point1.y ; public void mouser
40、eleased(mouseevent event) int x0,y0; graphics g=right.getgraphics(); switch(f) case 2: point2=event.getpoint(); x=point2.x; y=point2.y ; g.setcolor(c); g.drawline(sx,sy,x,y); break; case 3: point2=event.getpoint(); x=point2.x; y=point2.y ; x0=x>sx?sx:x; y0=y>sy?sy:y; g.setcolor(c); if(! fill)
41、g.drawoval(x0,y0,math.abs(x-sx),math.abs(y-sy); else g.filloval(x0,y0,math.abs(x-sx),math.abs(y-sy); break; case 4: point2=event.getpoint(); x=point2.x; y=point2.y ; x0=x>sx?sx:x; y0=y>sy?sy:y; g.setcolor(c); if(! fill) g.drawrect(x0,y0,math.abs(x-sx),math.abs(y-sy); else g.fillrect(x0,y0,math
42、.abs(x-sx),math.abs(y-sy); break; public void mouseentered(mouseevent event) public void mouseexited(mouseevent event) public void mouseclicked(mouseevent event) public void mousemoved(mouseevent event) public void mousedragged(mouseevent event) int x0,y0; graphics g=right.getgraphics(); switch(f) c
43、ase 1: point2=event.getpoint(); x=point2.x; y=point2.y ; g.setcolor(c); g.drawline(sx,sy,x,y); sx=x; sy=y; break; case 2: if(! flag) point2=event.getpoint(); x=point2.x; y=point2.y ; g.drawline(sx,sy,x,y); flag=true; else g.setxormode(color.white); g.drawline(sx,sy,x,y); point2=event.getpoint(); x=p
44、oint2.x; y=point2.y ; g.drawline(sx,sy,x,y); break; case 3: if(! flag) point2=event.getpoint(); x=point2.x; y=point2.y ; x0=x>sx?sx:x; y0=y>sy?sy:y; if(! fill) g.drawoval(x0,y0,math.abs(x-sx),math.abs(y-sy); else g.filloval(x0,y0,math.abs(x-sx),math.abs(y-sy); flag=true; else g.setxormode(colo
45、r.white); x0=x>sx?sx:x; y0=y>sy?sy:y; if(! fill) g.drawoval(x0,y0,math.abs(x-sx),math.abs(y-sy); else g.filloval(x0,y0,math.abs(x-sx),math.abs(y-sy); point2=event.getpoint(); x=point2.x; y=point2.y ; x0=x>sx?sx:x; y0=y>sy?sy:y; if(! fill) g.drawoval(x0,y0,math.abs(x-sx),math.abs(y-sy); else g.filloval(x0,y0,math.abs(x-sx),math.abs(y-sy); break; case 4: if(! flag) point2=event.getp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 调度培训考试题及答案
- (正式版)DB15∕T 3358-2024 《绵羊腹腔镜活体采卵技术规程》
- 电厂脱销考试题及答案
- 团队成员任务分配与跟踪管理模板
- 企业法律事务处理与合规管理模板
- 工业用材料进销存管理软件开发协议
- 高科技设备采购与技术支持协议
- 我的老师让我感动记叙文题写作(8篇)
- 音乐鉴赏之古典音乐之美:高中艺术教育教案
- 《五年级数学图形变换与代数方程解法》
- GB/T 212-2008煤的工业分析方法
- 冀教版8年级上英语各单元语法课件
- 国内外新能源现状及发展趋势课件
- 大班科学《玩转扑克牌》课件
- 高速公路改扩建桥梁拼宽施工技术及质量控制
- 双台110kV主变短路电流计算书
- DB1750-2019水电站(厂)防雷与接地性能测试技术规范
- 牛常见病防治课件
- 危险物品储存安全隐患排查整治表
- 装饰工程保修单
- IInterlib区域图书馆集群管理系统-用户手册
评论
0/150
提交评论