您的位置:首页 > 编程语言 > Java开发

Java第四次实验(简易时钟)

2016-05-05 23:40 621 查看
首先吐槽一下数模,终于结束了,报警啊,第一天拉格朗日附体,设计各种从来没见过的模型,第二天化身当代陈景润,计算各种复杂模型(队友是天上地下挖数据...),第三天曹雪芹在世,满纸荒唐言,一把辛酸泪!

总体来说虽然有点准备的不够充分,但是还是度过了很紧促的三天,感谢队友的陪伴,没想到还有附带技能(精通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);

}
}


    
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: