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

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

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



    

你可能感兴趣的:(Java)