java钟表

来源:互联网 发布:移动商城源码 编辑:程序博客网 时间:2024/04/29 00:29

最后一次写一个java小程序,关于钟表的。实现过程如下:

1.用线程每秒钟显示一次时间(sleep(1000)),这样看上去表就在走

2.根据显示的时间画表,就是先在网上找一幅表盘图片,再按时间和指针的关系在表盘上画上指针就行了

以下是代码:

import java.applet.*;import java.awt.*;import java.awt.event.*;import java.util.*;import java.math.*;import java.awt.geom.*;public class clock extends Applet implements Runnable{Label l;Thread t=new Thread(this);Date d;Image img;static String s;double xs,ys,xm,ym,xh,yh;public void init(){setSize(350,300);setLayout(null);l=new Label("");add(l);l.setBounds(30, 240, 200, 30);xs=112;ys=80;t.start();}public void start(){img=getImage(getCodeBase(),"clock.jpg");}public void paint(Graphics g){int wt=img.getWidth(this);int ht=img.getHeight(this);g.drawImage(img, 40, 70, wt/2, ht/2, this);Graphics2D g2d=(Graphics2D)g;BasicStroke bs1=new BasicStroke(1f,1,0);//改变指针的粗细,这样比较好看BasicStroke bs2=new BasicStroke(3f,1,0);BasicStroke bs3=new BasicStroke(6f,1,0);Line2D obj1=new Line2D.Double(112, 136, (int)xs, (int)ys);Line2D obj2=new Line2D.Double(112, 137, (int)xm, (int)ym);Line2D obj3=new Line2D.Double(112, 137, (int)xh, (int)yh);g2d.setStroke(bs1);g2d.draw(obj1);g2d.setStroke(bs2);g2d.draw(obj2);g2d.setStroke(bs3);g2d.draw(obj3);}public void run(){while(true){d=new Date();s=d.toString();l.setText(s);int hour=Integer.parseInt(s.substring(11, 13))-12;//时、分、秒位置的算法int min=Integer.parseInt(s.substring(14, 16));int sec=Integer.parseInt(s.substring(17, 19));        xs=56*Math.sin(Math.toRadians(6*sec))+112;        ys=136-56*Math.cos(Math.toRadians(6*sec));        xm=51*Math.sin(Math.toRadians(6*(min+sec/60)))+112;        ym=136-51*Math.cos(Math.toRadians(6*(min+1/60)));        xh=46*Math.sin(Math.toRadians(30*(hour+min/60)))+112;        yh=136-46*Math.cos(Math.toRadians(30*(hour+min/60)));        repaint();try{t.sleep(1000);}catch(InterruptedException ie){}}}}
 
 

小结:

1.指针的位置很难设定,我是一次一次尝试才得到表盘中心位置的

2.指针的算法还是有缺陷,具体说来其实是画指针的时候我是用Line2D obj3=new Line2D.Double(起点横坐标, 起点纵坐标, 终点横坐标, 终点纵坐标);来画的,而坐标只能用int   类型的数据,于是不能很好的表示时和分的位置,例如像图上表示的13:17:46,时针应该在1点往下一点,而分针也应该接近18分的位置。


原创粉丝点击