java编写时钟程序_Java编写时钟 Applet 程序

本文展示了如何使用Java Applet编写一个实时显示时间的动态时钟程序。通过利用`Calendar`类获取当前时间,并用几何运算将时间转换为角度来绘制时针、分针和秒针。此外,程序还画出了表盘上的数字和刻度,实现了时间的实时更新。
摘要由CSDN通过智能技术生成

packageclockApplet;importjava.applet.Applet;importjava.awt.Color;importjava.awt.Graphics;importjava.util.Calendar;importjava.util.GregorianCalendar;public class ClockApplet extends Applet implementsRunnable {/*成员变量*/

int x = 0, y = 0, r = 100; //(x,y)为(0,0)点,表示原点

int h, m, s; //时,分,秒

double rad = Math.PI / 180; //1°

/*初始化函数*/

public voidinit() {

Calendar now= new GregorianCalendar(); /** GregorianCalendar(标准阳历)

* 是Calendar(日历)【国际环境下都能运行的程序】

* 的子类*/s= now.get(Calendar.SECOND) * 6; //秒针转换成角度:1秒,秒针动一次,转动6°

m = now.get(Calendar.MINUTE) * 6; //分针转换为角度:1分,分针动一次,转动6°

h = now.get(Calendar.HOUR) * 30 + now.get(Calendar.MINUTE) / 12 * 6; //先把分化为小时,再乘以6°

/** Calendar.HOUR 显示范围:1-12(无论AM还是PM) Calendar.HOUR_OF_DAY 显示范围:1-24(包括PM*/Thread t= new Thread(this);

t.start();

}/** 画图函数 注意:Applet的画图界面以左上角为(0,0)原点坐标,即所有坐标均大于等于0,该点的坐标越大(且>0)*/

public voidpaint(Graphics g) {super.paint(g);/** paint(g)函数会重绘图像,要加上super.paint(g),表示在原来图像的基础上,再画图。

* 如果不加super.paint(g),重绘时,会将原有的绘制清空,再根据paing(g)函数绘制。*/g.setColor(Color.BLACK);

g.drawOval(x, y, r* 2, r * 2);//画表

/*drawOval(x,y,width,height)以矩形恰好框住椭圆,矩形左上角的顶点坐标为(x,y)*/

//秒针

int x1 = (int) (90 * Math.sin(rad *s));int y1 = (int) (90 * Math.cos(rad *s));

g.drawLine(r, r, r+ x1, r -y1);/*drawLine(a,b,c,d) (a,b)为起始坐标 (c,d)为终点坐标*/

//分针

x1 = (int) (80 * Math.sin(rad *m));

y1= (int) (80 * Math.cos(rad *m));

g.drawLine(r, r, r+ x1, r -y1);//时针

x1 = (int) (60 * Math.sin(rad *h));

y1= (int) (60 * Math.cos(rad *h));

g.drawLine(r, r, r+ x1, r -y1);//画数字

int d = 30;for (int i = 1; i <= 12; i++) {

x1= (int) ((r - 10) * Math.sin(rad *d));

y1= (int) ((r - 10) * Math.cos(rad *d));

g.drawString(i+ "", r + x1, r -y1);

d+= 30;

}//画刻度

d = 0;for (int i = 1; i <= 60; i++) {

x1= (int) ((r - 2) * Math.sin(rad *d));

y1= (int) ((r - 2) * Math.cos(rad *d));

g.drawString(".", r + x1, r -y1);

d+= 6;

}//显示时间

Calendar now1 = newGregorianCalendar();inta, b, c;

a=now1.get(Calendar.HOUR_OF_DAY);

b=now1.get(Calendar.MINUTE);

c=now1.get(Calendar.SECOND);

g.drawString(a+ ":" + b + ":" + c, 0, 10);

}//实现Runnable

public voidrun() {while (true) {try{

Thread.sleep(1000);//间隔一秒

}catch(Exception ex) {

}//秒针每次走6°

s += 6;//秒针归零

if (s >= 360) {

s= 0;

m+= 6;//分针走72°,时针走6° 分针的12倍,时针走一次

if (m == 72 || m == 144 || m == 288) {

h+= 6;

}//分针归零

if (m >= 360) {

m= 0;

h+= 6;

}//时针归零

if (h >= 360) {

h= 0;

}

}//重新绘制

this.repaint();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值