《Java课程设计--数字时钟.docx》由会员分享,可在线阅读,更多相关《Java课程设计--数字时钟.docx(13页珍藏版)》请在第壹文秘上搜索。
1、第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.4GRAP
2、HICS方法的实现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语言的基础
3、知识运用,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。模拟数字时钟在现日常生活中运用广泛、随处可见,能够设计出这样一个功能较为全面的JAvA小程序是十分重要的,也能提高学生对JAvA语言的兴趣,增强其编程的能力。1.2课题的要求1.2.1图形绘制的要求(一)所绘画时钟的要求具有表盘、数字及三根指针。(二)用数字表显示时间。(三)所绘制的时钟应该整齐,清晰,使用户能够看一眼就准确得知当前时间。1.2.2线程的要求(一)要求时钟与数字表是动态的效果。(二)要求时钟与数字表每秒刷新一次。第2章概要设计2.1整个程序的模块结构。根据课题要求,整个程序按功能可划
4、分为界面、钟面绘制、时针绘制和线程这四个主要模块。程序各功能模块的划分,及主要流程如图2T所示。图2-1整个程序各功能模块间的流程2. 2创建主窗体类的继承是OOP的一个重要特征。当一个类继承另一个类,该类就能拥有被继承类的所有属性和方法。自定义一个类继承JFranle类,定义两个成员变量(一个成员变量作为画板,一个作为展示板),作为画的载体,并且这两个变量由BufferedImage修饰。创建ClOCk构造方法,具体定义主窗体的坐标及大小,继承父类的方法需要super();,并放在该方法的首行,也可以重写JFranIe的方法。通过JFrame类中的方法的重写,完善主窗体。2.3 创建画的方法
5、创建一个画的方法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类及其扩展Grap
6、hics类是所有图形上下文的抽象基类,允许应用程序在组件(己经在各种设备上实现)以及闭屏图像上进行绘制。在画时钟这个图形的过程中使用了很多GraPhiCS类中的方法,从而实现画圆,画点,画线的操作。Graphics2D类扩展Graphics类,以提供对几何形状、坐标转换、颜色管理和文本布局更为复杂的控制。通过Graphics2D中的getStroke()方法,可以改变线条的粗细长度及虚实。2.6 自定义的Rotate方法通过此方法实现时针、分针、秒针在表盘中的转动方式。2.7 内部类的使用一个类被嵌套在定义于另一个类中,称为内部类,包含内部类的类为外部类。与外部类一样,内部类也可以有成员变量和
7、成员方法,通过创建内部类对象也可以访问其成员变量和调用其成员方法。创建一个内部类ClockThread使得RUnnable类作为它的接口,从而在CloCk类内部实现多线程。内部类的优势在于虽然是一个类,却可以访问与使用外部类中定义的变量及方法。2.8 多线程2.8.1 实现RUnnabIe接口创建线程RUnnabIe接口提供了无须扩展Thread类就可以创建一个新线程的方式,从而克服了Java单一继承方式所带来的各种限制。定义一个类实现Runnable接口,即在该类中提供run()方法的实现。把runnable的一个实例作为参数传递给Thread类的一个构造方法,该实例对象提供程体的runO方
8、法实现。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通过
9、接口的方式获得了多线程的能力,run方法在ClockThread类内部实现,然而ClockThread中同时也有画的方法,作为内部类能够获得CIOCk类内部的方法,同时实现画的方法publicClockOSUPer(模拟数字时钟);标注主窗体的命名setSize(900,900);定义主窗体为900*900SetLOCation(800,200);定义主窗体的坐标起点是x=800,y=200的点SetDefaUltCIoSeOPeratiOn(以阳磔在;定义窗体可以被关闭SetViSibIe(true);定义窗体是可见的SetReSiZabIe(false);定义窗体是可见的定义窗体是不可被更
10、改大小的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类的方法将日期提取
11、到各对象中。将星期放在数组中,通过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(Calen
12、dar.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=board
13、Draw.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,1
14、45)的点上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(,10z175,310)g.drawString(,
15、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的大小范围是01privatevoidRotate(Graphicsg,Doublepercent,intlength)doubledegree=360*PerCent/d