您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > Java模拟时钟制作案例
Java模拟时钟制作案例Java开发实例需求分析模拟时钟,把它放在程序中可以给人一种清新的感觉。比起数字时钟来说,有一定的真实感怀旧情结。看到秒针一下一下的转动,时时提醒,时间在不断流逝,要我们珍惜时间。子在川上曰:逝者如斯夫。软件分析类:实现:ActionListener继承:JFrame监听:timer或是进程,本例使用timer。时间戳:使用Date,SimpleDateFormat。绘图:重写Graphics的paint方法。动画:在actionPerformed中修改坐标,并repaint。构建框架主类time1.实现接口。继承Jframe。添加main方法完善代码添加timer通过Date获取当前时间通过SimpleDateFormat处理时间格式。实例化主类,使其在控制台打印当前时间,每隔一秒打印一次。修改后的代码如下。程序代码导入类和文件。程序代码数字时钟添加JLabel,在JLabel上显示时间把JLabel添加到JFrame上。程序代码导入类和文件。程序代码数字时钟运行效果。绘制秒针使用直线绘制秒针。定义秒针Line2D.DoublelLine2D.Doublel=newLine2D.Double(125,50,125,125);修改坐标。s1=Integer.parseInt(s.format(d));l.x1=125+70*Math.cos((s1*6-90)*Math.PI/180f);l.y1=125+70*Math.sin((s1*6-90)*Math.PI/180f);repaint();绘制秒针重写paint:publicvoidpaint(Graphicsg){super.paint(g);Graphics2Dg2=(Graphics2D)g;g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);g2.draw(l);}绘制秒针运行效果。分针和时针分针的绘制和秒针一样。这里不再分析。时针的绘制。时针每小时转动30°,一分钟转动0.5°。时针的角度为小时数*30+分钟数*0.5。如:一点半的角度为:1*30+30*0.5=30+15=45°三点半的角度为:3*30+30*0.5=90+15=105°程序代码主类程序代码程序代码运行效果运行效果面板刻度绘制刻度l1=newLine2D.Double[60];for(inti=0;il1.length;i++){doubleb[]=newdouble[4];intj;if(i%5==0){if(i%15==0){j=50;}else{j=60;}面板刻度绘制刻度}else{j=70;}b[0]=125+80*Math.cos((i*6-90)*Math.PI/180d);b[1]=125+80*Math.sin((i*6-90)*Math.PI/180f);b[2]=125+j*Math.cos((i*6-90)*Math.PI/180f);b[3]=125+j*Math.sin((i*6-90)*Math.PI/180f);l1[i]=newLine2D.Double(b[0],b[1],b[2],b[3]);}运行效果程序代码程序代码程序代码程序代码程序代码代码优化与改进以上的代码已经能基本完成时钟的功能。有些代码还可以进一步优化。使代码更加简洁。重用性更好。通过以下3方面进行优化。1、时间的获取,使用一个类完成。2、坐标的转换,使用函数。定义一个point类。3、坐标的转换,使用接口。4、美化指针,可以为不规则形状。时间的获取时间获取修改:actionPerformedg=newgettime();jl.setText(g.getH()+:+g.getM()+:+g.getS());s1=g.getS();m1=g.getM();h1=g.getH();定义一个point类坐标的转换,使用方法添加方法:pointxy(intx,inty,intr,floata){pointp=newpoint();p.setX(x+r*Math.cos((a-90)*Math.PI/180d));p.setY(y+r*Math.sin((a-90)*Math.PI/180d));returnp;}坐标的转换,使用方法调用方法:p0=xy(125,125,75,s1*6);s.x1=p0.getX();s.y1=p0.getY();p0=xy(125,125,65,m1*6);m.x1=p0.getX();m.y1=p0.getY();p0=xy(125,125,55,(h1*30+m1/2f));h.x1=p0.getX();h.y1=p0.getX();坐标的转换,使用方法调用方法:pointp0;p0=newpoint();p0=xy(125,125,80,i*6);b[0]=p0.getX();b[1]=p0.getY();p0=xy(125,125,j,i*6);b[2]=p0.getX();b[3]=p0.getY();l1[i]=newLine2D.Double(b[0],b[1],b[2],b[3]);坐标的转换,使用接口定义接口packaget;publicinterfacepoint_xy{pointpoint_xy(intx,inty,intr,floata);}坐标的转换,使用接口实现接口publicclasstime6extendsJFrameimplementspoint_xy,ActionListenerpublicpointpoint_xy(intx,inty,intr,floata){pointp=newpoint();p.setX(x+r*Math.cos((a-90)*Math.PI/180d));p.setY(y+r*Math.sin((a-90)*Math.PI/180d));returnp;};美化指针使用GeneralPathstaticGeneralPathtick_s=newGeneralPath();tick_s.moveTo(120,125);tick_s.quadTo(120,120,125,120);tick_s.quadTo(150,100,195,125);tick_s.quadTo(150,150,125,130);tick_s.quadTo(120,130,120,125);g2.fill(tick_s);美化指针调用AffineTransformpublicAffineTransformsc=newAffineTransform();sc.setToRotation(Math.PI/30f*(s1-15),125,125);g2.fill(tick_s.createTransformedShape(sc));使用同样的方法可以美化分针、时针和面板。到此开发过程已经结束以下给出完整的代码。程序代码程序代码程序代码程序代码程序代码程序代码运行效果
本文标题:Java模拟时钟制作案例
链接地址:https://www.777doc.com/doc-5144765 .html