Java-时钟小应用程序

先上图!!!!
在这里插入图片描述

package Clock;

import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.util.Calendar;
import java.util.GregorianCalendar;

public class clockApplet extends Applet implements Runnable {
	private static final long serialVersionUID = 1L;

/* 成员变量 */
    int x = 0, y = 0, r = 100; // (x,y)为(0,0)点,表示原点
    int h, m, s; // 时,分,秒
    double rad = Math.PI / 180; //  1°

/* 初始化函数 */
    public void init() {
        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 void paint(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 = new GregorianCalendar();
        int a, 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 void run() {
         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();} }}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GodOuO

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值