欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOCX文档下载  

    Java课程设计--数字时钟.docx

    • 资源ID:6722177       资源大小:75.13KB        全文页数:13页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    Java课程设计--数字时钟.docx

    第1章课题概述11.1 课题的目的11.2 课题的要求11.2.1 图形绘制的要求11.2. 2线程的要求1第2章概要设计22.1整个程序的模块结构。22.2 创建主窗体22.3 创建画的方法32.4 日期类的使用31.1 5GRAPHICS类及其扩展32.6 自定义的ROTATE方法32.7 内部类的使用32.8 多线程32.8.1实现RUNNABLE接口创建线程32.8.2RUN()方法及REPAINT()方法4第3章程序功能的实现53.1主函数的实现53.2主要功能模块的实现53.2.1主窗体的实现及内部类的套用53.2.2日期类的实现53.2.3PAINT方法的实现63.2.4GRAPHICS方法的实现63.2.5ROTATE方法的实现73.2.6两块板作交换以及REPAINT()方法73.2.7SLEEPO方法73.2.8接口与RUNO方法7第4章调试及发现问题的解决9第5章程序测试及分析H第6章总结12参考文献14第1章课题概述本次课程设计的题目是设计并实现模拟数字时钟(界面包括表盘和指针并用数字表显示时间)的功能。1.1课题的目的JAVA程序设计是计算机相关专业的必修专业基础课程,其实践性、应用性很强。实践教学环节是必不可少的一个重要环节。本课程的程序设计是一次全面的综合训练,设计目的是加深学生对理论教学内容的理解与掌握,使学生较系统地掌握程序设计及JAVA语言的基础知识运用,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。模拟数字时钟在现日常生活中运用广泛、随处可见,能够设计出这样一个功能较为全面的JAvA小程序是十分重要的,也能提高学生对JAvA语言的兴趣,增强其编程的能力。1.2课题的要求1.2.1图形绘制的要求(一)所绘画时钟的要求具有表盘、数字及三根指针。(二)用数字表显示时间。(三)所绘制的时钟应该整齐,清晰,使用户能够看一眼就准确得知当前时间。1.2.2线程的要求(一)要求时钟与数字表是动态的效果。(二)要求时钟与数字表每秒刷新一次。第2章概要设计2.1整个程序的模块结构。根据课题要求,整个程序按功能可划分为界面、钟面绘制、时针绘制和线程这四个主要模块。程序各功能模块的划分,及主要流程如图2T所示。图2-1整个程序各功能模块间的流程2. 2创建主窗体类的继承是OOP的一个重要特征。当一个类继承另一个类,该类就能拥有被继承类的所有属性和方法。自定义一个类继承JFranle类,定义两个成员变量(一个成员变量作为画板,一个作为展示板),作为画的载体,并且这两个变量由BufferedImage修饰。创建ClOCk构造方法,具体定义主窗体的坐标及大小,继承父类的方法需要super();,并放在该方法的首行,也可以重写JFranIe的方法。通过JFrame类中的方法的重写,完善主窗体。2.3 创建画的方法创建一个画的方法Paint,Paint接口定义如何为Graphics操作生成颜色模式,通过调用Graphics类,将所画的内容画到定义的一个成员变量(boardDisplay展示板)上。2.4 日期类的使用CaIendar是一个抽象类,不能直接实例化CaIendar对象,必须通过静态方法getlnstance来获取Calendar对象。利用Calendar类提供的WEEK,MOUTH,DAY,HOUR,MINUTE,SECOND和YEAR方法获得现在的时间。利用String中的方法String.format(),将日期的数据以自定义的形式而排列起来。1.1 5GraPhiCS类及其扩展Graphics类是所有图形上下文的抽象基类,允许应用程序在组件(己经在各种设备上实现)以及闭屏图像上进行绘制。在画时钟这个图形的过程中使用了很多GraPhiCS类中的方法,从而实现画圆,画点,画线的操作。Graphics2D类扩展Graphics类,以提供对几何形状、坐标转换、颜色管理和文本布局更为复杂的控制。通过Graphics2D中的getStroke()方法,可以改变线条的粗细长度及虚实。2.6 自定义的Rotate方法通过此方法实现时针、分针、秒针在表盘中的转动方式。2.7 内部类的使用一个类被嵌套在定义于另一个类中,称为内部类,包含内部类的类为外部类。与外部类一样,内部类也可以有成员变量和成员方法,通过创建内部类对象也可以访问其成员变量和调用其成员方法。创建一个内部类ClockThread使得RUnnable类作为它的接口,从而在CloCk类内部实现多线程。内部类的优势在于虽然是一个类,却可以访问与使用外部类中定义的变量及方法。2.8 多线程2.8.1 实现RUnnabIe接口创建线程RUnnabIe接口提供了无须扩展Thread类就可以创建一个新线程的方式,从而克服了Java单一继承方式所带来的各种限制。定义一个类实现Runnable接口,即在该类中提供run()方法的实现。把runnable的一个实例作为参数传递给Thread类的一个构造方法,该实例对象提供程体的runO方法实现。2. 8.2run()方法及repaint()方法run()在线程里的地位相当于main方法,run()方法被start()方法调用。调用repaint。方法的时候直接就是由线程调用Paint()方法进行绘制,用repaint()进行刷新显示。第3章程序功能的实现3.1主函数的实现通过此方法调用CloCk(),从而实现时钟的课程设计。publicstaticvoidmain(Stringargs)ClockCloCk=newClockO;)3. 2主要功能模块的实现3. 2.1主窗体的实现及内部类的套用在Clock类的内部还有一个内部类ClockThread,ClockThread通过接口的方式获得了多线程的能力,run方法在ClockThread类内部实现,然而ClockThread中同时也有画的方法,作为内部类能够获得CIOCk类内部的方法,同时实现画的方法publicClockOSUPer(模拟数字时钟);标注主窗体的命名setSize(900,900);定义主窗体为900*900SetLOCation(800,200);定义主窗体的坐标起点是x=800,y=200的点SetDefaUltCIoSeOPeratiOn(以阳磔在;定义窗体可以被关闭SetViSibIe(true);定义窗体是可见的SetReSiZabIe(false);定义窗体是可见的定义窗体是不可被更改大小的boardDraw=newBufferedImage(this.getWidth0,this.getHeight0,Bufferedlmage.TYPE_INT_RGB);定义画板的大小boardDisplay=newBufferedlniage(this.getWidth0,this.getHeight0,Bufferedlmage.TYPE_INT_RGB);定义展示板的大小newThread(newClockThread0).start0;)3. 2.2日期类的实现Calendar通过静态方法getlnstance来获取Calendar对象。通过Calendar类的方法将日期提取到各对象中。将星期放在数组中,通过String.format这个方法以自己所定义的排列方式将字符串排列整齐。Calendarc=Calendar,getlnstance;intweek=c.get(Calendar.DAY_OF_WEEK);intmonth=c.get(Calendar.MONTH);intday=c.get(Calendar.DATE);inthour=c.get(Calendar.HOUR_OF_DAY);intminute=c.get(Calendar.MINUTE);intsecond=c.get(Calendar.SEc(M);intyear=c.get(Calendar.YEAR);StringWeekName=(星期日","星期一","星期二","星期三",星期四","星期五”,"星期六";StringtimeString=String,format("%s%s年d月d%02d:%02d:%02d",weekNameweek,year,month+1,day,hour,minute,second);3.2.3Paint方法的实现通过这个paint的方法,将画笔所画的图形和数字画到展示板上。publicvoidpaint(Graphicsg)g.drawlmageCboardDisplay,0,O,null);)3.2.4Graphics方法的实现Graphicsg=boardDraw.getGraphicsO;g.SetColor(Color.WHITE);将颜色改为白色g.ClearRect(O,O,boardDraw.getWidth(),boardDraw.getHeightO);清空画板的颜色g.fiHRect(O,O,boardDraw.getWidthO,boardDraw.getHeightO);填充画板的颜色g.setFonl(newFont("黑体",Font.BOLD,40);将数字设置为黑体,40号大小g.SetColor(Color.BLACK);g.drawString(z,12zz,435,145):将数字12画在主窗体内坐标为(435,145)的点上g.drawString(,6,450,780);g.drawString(,/9,125,470);g.drawString(,3zz,760,465);g.SetColor(Color.PINK);g.drawString(,1>,595,195);g.drawString(,2z,>715,310);g.drawString("4",715,600);g.drawString(,5zz)600,720);g.drawString(,/7,285,720);g.drawString(,8*,175,600);g.drawString(,10z>>175,310)g.drawString(,11yz,285,195);Graphics2Dg2d=(Graphics2D)g;将GraPhics方法强制转换为GraPhics2DStrokea;定义一个变量a=newBaSiCStrOke(8f);将初始粗细长度的八倍粗给a变量g2d.setStroke(a);g2d对象获得a的粗度g.setColor(Color.BLACK);g.drawval(100,100,700,700);在主窗体内画一个以(100jOO)为宽度为700,高度为700的圆3. 2.5ROtate方法的实现Rotate自己定义的方法,其主要用于实现的是三根指针的旋转变换。Percent的大小范围是0"1privatevoidRotate(Graphicsg,Doublepercent,intlength)doubledegree=360*PerCent/degree的范围是0360intx=(int)(455+Math,cos(2*Math.PI*(90-degree)/360)* length);以455为中心+cos(2H(90-degree)/360)*length,其中Iength是自己定义的长度inty=(int)(455-Math,sin(2*Math.PI*(90-degree)/360)* length);g.ClrawLine(455,455,x,y);以点(455,455),(x,y)为两点画线)3.2.6两块板作交换以及repaintO方法画板与展示板作交换使得每次展示的都是展示板,起到的效果是将画板上画的图形转移到展示板上再由展示板展示。repaint先调用update再调用painto调用repaint。方法的时候直接就是由线程调用Paint()方法进行绘制,用repaint()进行刷新显示。BufferedImagetmp=boardDisplay;boardDisplay=boardDraw;boardDraw=tmp;repaint();3.2.7sIeepO方法sleep(1000)表示程序睡眠1秒钟,I秒钟画一次,起到的效果与时钟转动的效果是一致的。然而Thread.sleep。需要用try.catch捕捉异常try(Thread,sleep(100O);catch(Exceptione)System,out.println(c);)3.2.8接口与runO方法RUnnable是CIoCkThread类的接口,从而实现多线程。run()由start()方法调用。isShowing()的判断可以保证run()方法的持续进行。classClockThreadimplementsRunnablepublicvoidrunOwhile(isShowing()第4章调试及发现问题的解决虽然在程序的编写过程中遇到了很多问题,但是通过上网查阅相关资料,与其它同学讨论,询问指导老师等方式,最终都一一解决了,程序实现及调试过程中遇到的主要问题及解决方法如下。1、如何让JFrame和RUnnabIC依附于一个类转而拆分到两个类,但依旧能实现数字时钟的功能?解决方法:内部类的使用,最初我得程序实现使用的是publicclassClockextendsJFrameimplementsRunnable的结构,在继承JFrame类的同时有接口Runnable,于是老师提出是否能够将它们分开,用两个类将他们联系起来。起初我十分的疑惑,因为图形绘制的方法与多线程用到的方法是掺杂在一起的,很难将它们分得很清楚,如果要分开那么这个程序将会变得十分复杂,也会变得有些混乱。但是当同学提醒我用内部类来解决的时候,这个问题就变得明朗了。内部类的成员可以是变量和方法,也可以是一个类,作为外部类成员的内部类与其他成员一样。因此,内部类的使用就很巧妙地解决了这一问题,更改后的程序依旧是清晰,简单的。2、讲述自定义的Rotate的方法。解决方案:Rotate自己定义的方法,其主要用于实现的是三根指针的旋转变换。Percent的大小范围是01privatevoidRotate(Graphicsg,Doublepercent,intlength)doubledegree=360*PerCent/degree的范围是0360intx=(int)(455+Math,cos(2*Math.PI*(90-degree)/360)* length);以455为中心+cos(2H(90-degree)/360)*length,其中ICngth是自己定义的长度inty=(int)(455-Math,sin(2*Math.PI*(90-degree)/360)* length);以455为中心-Sin(2丸(90-degree)/360)*length,其中ICngth是自己定义的长度g.drawLine(455,455,x,y);以点(455,455),(x,y)为两点画线3、我们可知时针,分钟,秒针三根针的宽度在表盘上的粗细程度是不同的,我们如何将其区分开?(做到时针最粗,秒针最细)解决方案:GraPhics2D类中的Stroke对象可以改变图形的粗细长度。通过用a二newBaSiCStrOke(3f);的方法可以将图像的粗细度变为原来的3倍,再将a的粗度给g2d这个变量。秒针如下,分针、时针只需增加粗细度即可。a=newBasicStroke(Sf);g2d.setStroke(a);Rotate(g,second/60.0,275);第5章程序测试及分析模拟数字时钟的程序测试还是相对简单的,然而在初步实现功能之后,我又通过GraPhiCe类中的一些绘画方法进一步修饰,如:加粗局部线条的粗细,增加刻度线,将时钟卡通化,使其变得更加有趣。模拟数字时钟如图2所示。图2模拟数字时钟实现图第6章总结对于课程设计,基本上实现了模拟时钟程序的要求,此程序在屏幕上方有一指针式钟面,下方数字方式显示日期和时间,该时间应与指针显示的时间一致,下方的矩形框作为秒表。该设计的特点是时钟上标有12个刻度,并且各指针是不同的颜色,看上去比较美观。我想在不断地进行对该设计的完善,不仅能为该时钟设置背景,以增加该时钟的美观效果。困难及解决途径上机实习完成课程设计的过程中,遇到了不少的问题,一是有一些东西自己没有学过,而是在编写的过程中由于思路不清晰以及自己的粗心给自己制造了一些麻烦,还有就是会产生一些异常。但是在经过自己和老师、同学的交流,以及自己查阅资料和APl文档,针对性的对不懂得问题进行查询,自己没有学过但是又要用到得逐渐的得到解决,再经过自己反复的理清思路和反复的检查由思路不清晰和粗心带来的麻烦也慢慢得到了解决。感悟首先,java作为一种计算机语言,它具备语言的特性,就是我们在课堂上认真听取了老师的指导之后,还得自己回去认真看书写程序,并且上机实习才能发现问题及时解决问题。就像我们学习语言一样要通过和同学之间的交流才能提高我们的实际应用能力。所以,我们在自己认真刻苦学习的同时,一定要多和同学老师交流,从他们那里吸取好的思维方式、好的学习方法。在上机实习的时候,我现在回顾自己一学期的学习,觉得首先应该熟悉java的概念,明白程序开发的基本思想,熟悉开发环境之后马上进行自主学习,自己学习的步伐千万不能落于老师讲课授课的速度。如果这样的话,我们很可能处于一种被动学习的劣势,失去对java学习的热情,以至于恶性循环,到最终的无可救药。在平时的训练和刚刚结束的上机实习中我深刻的体会到了学习好java我们就要一定要掌握好java的基本语句,包括条件语句和循环语句。这些就是我们编写程序这棵大树的必要组成枝叶。建立起关键语句的之后,我们才能有更强的功能和实用性。Java作为一个面向对象的编程语言,在图像方面具有很强的实现能力。这样很能激发我们的学习兴趣。在编写程序的时候发现,虽然它是一个面向对象的编程语言,我们一定要学会如何编写多个类和方法,在不断地摸索中培养我们自身设计面向对象解决方案的能力。作为学生的我们,是一个学习的过程,我们应该学习如何写好程序。而好的程序不仅仅是一系列语句的拼凑,我们要联系自身实际,用编程语言解决问题和实施解决问题的方案。在学习java的这一段时间当中,图形激发了我学习的巨大热情。所以,我觉得我自己一定要在打好坚实的基础的情况下,对图形学进行认真学习。在学习图形和图形用户接口的时候,觉得变得吃力起来。因为随着课程的加重,发现自己动手能力越来越若,在事件处理和图形用户接口的使用中,出现了知识点模棱两可的情况。当然,任何的困难挫折在不断地努力中都会变得脆弱,只是暂时的阴影。在以后的日子里,我要不断地学习这个博大精深的语言,继续不断的深化自己的实际动手能力。参考文献1宋波,李晋,李妙妍,张悦,刘杰,周传生Java程序设计一一基于JDK6和NetBeanS实现M.北京:清华大学出版社,2013.

    注意事项

    本文(Java课程设计--数字时钟.docx)为本站会员(李司机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开