Java第四次实验(简易时钟)
2016-05-05 23:40
621 查看
首先吐槽一下数模,终于结束了,报警啊,第一天拉格朗日附体,设计各种从来没见过的模型,第二天化身当代陈景润,计算各种复杂模型(队友是天上地下挖数据...),第三天曹雪芹在世,满纸荒唐言,一把辛酸泪!
总体来说虽然有点准备的不够充分,但是还是度过了很紧促的三天,感谢队友的陪伴,没想到还有附带技能(精通excel和ps,好吧虽然我是计算机专业的,但不会这个...),数模虽然有点儿戏了,相比较ACM总感觉不是那么严谨,而且比较扯,比较扯....但是还是挺好玩的,主要普及度广,能认识各种各种的其他专业的人(主要是妹子啦)
这个实验也捣鼓了一会,主要是时间那边要有相应的计算公式,一开始这个时钟是倒过来转得....
思路:
开一个线程,每隔一秒刷新一次,获取新的时间,分别计算时钟,分钟,秒钟转过的角度,注意这个角度是从竖直的那条线过来的,而画的时候是从原点开始,也就是一开始0~3的时候纵坐标是y-r*cos(角度),所以也就是角度+pi,最后根据角度和原点可以画出相对应的那个点,用graphics的drawLine方法把这两个点连起来。
总体来说虽然有点准备的不够充分,但是还是度过了很紧促的三天,感谢队友的陪伴,没想到还有附带技能(精通excel和ps,好吧虽然我是计算机专业的,但不会这个...),数模虽然有点儿戏了,相比较ACM总感觉不是那么严谨,而且比较扯,比较扯....但是还是挺好玩的,主要普及度广,能认识各种各种的其他专业的人(主要是妹子啦)
这个实验也捣鼓了一会,主要是时间那边要有相应的计算公式,一开始这个时钟是倒过来转得....
思路:
开一个线程,每隔一秒刷新一次,获取新的时间,分别计算时钟,分钟,秒钟转过的角度,注意这个角度是从竖直的那条线过来的,而画的时候是从原点开始,也就是一开始0~3的时候纵坐标是y-r*cos(角度),所以也就是角度+pi,最后根据角度和原点可以画出相对应的那个点,用graphics的drawLine方法把这两个点连起来。
import java.awt.Container; import java.awt.Graphics; import java.util.Date; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class four extends JFrame{ public four(){ setTitle("我的简易时钟"); setLayout(null); setBounds(200,200,600,600); Container container = getContentPane(); setVisible(true); Clock c= new Clock(); c.setBounds(0,0,600,500); container.add(c); } public static void main(String [] args){ new four(); } } class Clock extends JPanel implements Runnable{ Thread runner; static int x=250,y=250,r1=50,r2=75,r3=100;//坐标原点和时钟半径 int h,m,s;//当前的时分秒和相应的角度 double hx,hy,mx,my,sx,sy; Clock() { start(); } public void start(){//开启一个线程 if (runner==null) runner = new Thread(this); runner.start(); } public void run() { while(true) { Date date=new Date();//分别得到当前的时分秒 String hour = String.format("%tI",date); h=Integer.parseInt(hour); String minute = String.format("%tM",date); m= Integer.parseInt(minute); String second = String.format("%tS",date); s= Integer.parseInt(second); System.out.println("当前时间是:"+hour+"小时"+minute+"分钟"+second+"秒"); double d=3600*h+60*m+s;//算出一共多少秒 double hdeg=d/120;//24小时是360度,可得1s是1/120度 hdeg=Math.toRadians(hdeg); d=60*m+s; double mdeg=d/10;//60分钟是360度,可得1s是0.1度 mdeg=Math.toRadians(mdeg); double sdeg=s*6;//60秒是360度,可得1s是6度 sdeg=Math.toRadians(sdeg); hx=r1*Math.sin(hdeg)+x;//分别根据角度和半径计算个个指针所在位置 hy=r1*Math.cos(hdeg+Math.PI)+y; mx=r2*Math.sin(mdeg)+x; my=r2*Math.cos(mdeg+Math.PI)+y; sx=r3*Math.sin(sdeg)+x; sy=r3*Math.cos(sdeg+Math.PI)+y; repaint(); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public void paint(Graphics g){ g.clearRect(0,0,500,500); g.drawString("我的简易时钟",220,50); g.drawString("0",245,135); g.drawString("3",355,250); g.drawString("6",245,365); g.drawString("9",125,250); g.drawOval(120,120,250,250);//画出这个圆 g.drawLine(x,y,(int)hx,(int)hy);//因为drawLine只能画整数 g.drawLine(x,y,(int)mx,(int)my); g.drawLine(x,y,(int)sx,(int)sy); } }
相关文章推荐
- 从JBoss Seam 2.x迁移到JavaEE 7之一:组件模型
- 三个 DAL 相关的Java代码小工具
- Java中流的概念
- javaEE SSH框架对象转json问题
- Spring 学习笔记(一)
- java中的名字重用
- java单例模式
- Java序列化技术
- JavaWeb学习笔记——javabean与表单
- JAVA I/O(1)
- Java自旋锁
- java web 工作原理
- Java并发编程的艺术(一)
- Java实现红黑树
- spring学习链接
- Java实现B树
- 【第三章】 DI 之 3.1 DI的配置使用 ——跟我学spring3
- 最好的8个Java RESTful框架
- JAVA面向对象学习
- Spring MVC的异步模式