版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Java模拟时钟制作案例Java开发实例需求分析v模拟时钟,把它放在程序中可以给人一种清新的感觉。比起数字时钟来说,有一定的真实感怀旧情结。看到秒针一下一下的转动,时时提醒,时间在不断流逝,要我们珍惜时间。v子在川上曰:逝者如斯夫。软件分析v类:实现:ActionListener 继承:JFramev监听:timer或是进程,本例使用timer。v时间戳:使用Date,SimpleDateFormat。v绘图:重写Graphics的paint方法。v动画:在actionPerformed中修改坐标,并repaint。构建框架v主类time1.v实现接口。v继承Jframe。v添加main方法完
2、善代码v添加timerv通过Date获取当前时间v通过SimpleDateFormat处理时间格式。v实例化主类,使其在控制台打印当前时间,每隔一秒打印一次。修改后的代码如下。程序代码v导入类和文件。程序代码数字时钟v添加JLabel,在JLabel上显示时间v把JLabel添加到JFrame上。程序代码v导入类和文件。程序代码数字时钟v运行效果。绘制秒针v使用直线绘制秒针。定义秒针Line2D.Double l Line2D.Double l =new Line2D.Double(125,50,125,125);v修改坐标。s1=Integer.parseInt(s.format(d);l.
3、x1=125+70*Math.cos(s1*6-90)*Math.PI/180f);l.y1=125+70*Math.sin(s1*6-90)*Math.PI/180f);repaint();绘制秒针v重写paint:public void paint(Graphics g) super.paint(g); Graphics2D g2 = (Graphics2D) g; g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.draw(l); 绘制秒针v运行效果。分针
4、和时针v分针的绘制和秒针一样。这里不再分析。v时针的绘制。时针每小时转动30,一分钟转动0.5。时针的角度为小时数*30+分钟数*0.5。如:一点半的角度为:1*30+30*0.5=30+15=45三点半的角度为: 3*30+30*0.5=90+15=105程序代码v主类程序代码程序代码运行效果v运行效果面板刻度v绘制刻度vl1=new Line2D.Double60;vfor(int i=0 ;il1.length;i+)vvdouble b=new double4;vint j;vif(i%5=0)vif(i%15=0)vj=50;velse vj=60;v面板刻度v绘制刻度velse v
5、j=70;vvb0=125+80*Math.cos(i*6-90)*Math.PI/180d);vb1=125+80*Math.sin(i*6-90)*Math.PI/180f);vb2=125+j*Math.cos(i*6-90)*Math.PI/180f);vb3=125+j*Math.sin(i*6-90)*Math.PI/180f);vl1i =new Line2D.Double(b0,b1,b2,b3);v运行效果程序代码程序代码程序代码程序代码程序代码代码优化与改进v以上的代码已经能基本完成时钟的功能。有些代码还可以进一步优化。使代码更加简洁。重用性更好。通过以下3方面进行优化。v
6、1、时间的获取,使用一个类完成。v2、坐标的转换,使用函数。定义一个point类。v3、坐标的转换,使用接口。v4、美化指针,可以为不规则形状。时间的获取时间获取v修改: actionPerformedg=new gettime();jl.setText(g.getH()+:+g.getM()+:+g.getS();s1=g.getS();m1=g.getM();h1=g.getH();定义一个point类坐标的转换,使用方法添加方法:point xy(int x,int y ,int r, float a)point p=new point();p.setX(x+r*Math.cos(a-9
7、0)*Math.PI/180d);p.setY(y+r*Math.sin(a-90)*Math.PI/180d);return p;坐标的转换,使用方法调用方法: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();坐标的转换,使用方法调用方法:point p0; p0=new point();p0=xy(125,12
8、5,80,i*6);b0=p0.getX();b1=p0.getY();p0=xy(125,125,j,i*6);b2=p0.getX();b3=p0.getY();l1i =new Line2D.Double(b0,b1,b2,b3);坐标的转换,使用接口v定义接口package t;public interface point_xy point point_xy(int x,int y ,int r, float a);坐标的转换,使用接口v实现接口public class time6 extends JFrame implements point_xy,ActionListenerpub
9、lic point point_xy(int x,int y ,int r, float a) point p=new point();p.setX(x+r*Math.cos(a-90)*Math.PI/180d);p.setY(y+r*Math.sin(a-90)*Math.PI/180d);return p; ;美化指针v使用GeneralPath static GeneralPath tick_s = new GeneralPath(); 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);美化指针v调用AffineTransformpublic AffineTransform sc =new AffineTransform();sc.se
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 专业消防工程承包:2024年版劳务合同版
- 2025年度茶叶礼盒定制销售合作合同4篇
- 2025年度矿泉水经销商区域市场拓展及品牌推广合同
- 二零二五年度农业种植园除草作业合同
- 二零二五年度茶叶饮品出口与购销合同
- 二零二五年度银行短期周转借款合同规范模板
- 专项工程造价咨询修改合同:2024版版
- 二零二五年度私人借款与宠物医疗服务合同
- 二零二五年度公司离职保密协议赔偿标准合同范本
- 2025年度美食广场联营合作经营合同
- Unit4 What can you do Part B read and write (说课稿)-2024-2025学年人教PEP版英语五年级上册
- 2025年MEMS传感器行业深度分析报告
- 《线控底盘技术》2024年课程标准(含课程思政设计)
- 学校对口帮扶计划
- 仓库仓储安全管理培训课件模板
- 风力发电场运行维护手册
- 《3-6岁儿童学习与发展指南》专题培训
- 河道旅游开发合同
- 情人合同范例
- 建筑公司劳务合作协议书范本
- 安徽省合肥市2023-2024学年高一上学期物理期末试卷(含答案)
评论
0/150
提交评论