Clock.java

本文介绍了一个使用Java Applet实现的动态时钟程序。该程序能够实时显示当前时间,并通过绘制指针来指示秒、分、小时的位置。程序还包含了一个更新线程以确保时钟能够每秒刷新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import java.awt.Color;
import java.util.*;
import java.awt.*;
import java.applet.*;

public class Clock extends Applet implements Runnable {
   
    private static final long serialVersionUID = 1L;
    Thread timer = null;
    Label label;
    int lastxs = 50, lastys = 30, lastxm = 50, lastym = 30, lastxh = 50,
            lastyh = 30;

    public void init() {
        label = new Label(" ");       
       
        setBackground(Color.white);
        add(label);
    }

    @SuppressWarnings("deprecation")
    public void paint(Graphics g) {
        int xh, yh, xm, ym, xs, ys, s, m, h, xcenter, ycenter;
        Date rightnow = new Date();
        String today = rightnow.toLocaleString();
        label.setText(today);
        s = rightnow.getSeconds();
        m = rightnow.getMinutes();
        h = rightnow.getHours();
        xcenter = 100;
        ycenter = 80;

        xs = (int) (Math.cos(s * 3.14f / 30 - 3.14f / 2) * 45 + xcenter);
        ys = (int) (Math.sin(s * 3.14f / 30 - 3.14f / 2) * 45 + ycenter);
        xm = (int) (Math.cos(m * 3.14f / 30 - 3.14f / 2) * 45 + xcenter);
        ym = (int) (Math.sin(m * 3.14f / 30 - 3.14f / 2) * 45 + ycenter);
        xh = (int) (Math.cos((h * 30 + m * 2) * 3.14f / 180 - 3.14f / 2) * 30 + xcenter);
        yh = (int) (Math.sin((h * 30 + m * 2) * 3.14f / 180 - 3.14f / 2) * 30 + ycenter);

        g.setFont(new Font("TimesToman", Font.PLAIN, 14));
        g.setColor(Color.orange);
        g.fill3DRect(xcenter - 50, ycenter - 50, 100, 100, true);
        g.setColor(Color.darkGray);
        g.drawString("12", xcenter - 5, ycenter - 37);
        g.drawString("3", xcenter + 40, ycenter + 3);
        g.drawString("6", xcenter - 3, ycenter + 45);
        g.drawString("9", xcenter - 45, ycenter + 3);

        g.setColor(Color.orange);
        if (xs != lastxs || ys != lastys) {
            g.drawLine(xcenter, ycenter, lastxs, lastys);
        }
        if (xm != lastxm || ym != lastym) {
            g.drawLine(xcenter, ycenter - 1, lastxm, lastym);
            g.drawLine(xcenter - 1, ycenter, lastxm, lastym);
        }
        if (xh != lastxh || yh != lastyh) {
            g.drawLine(xcenter, ycenter - 1, lastxh, lastyh);
            g.drawLine(xcenter - 1, ycenter, lastxh, lastyh);
        }
        g.setColor(Color.red);

        g.drawLine(xcenter, ycenter, xs, ys);
        g.drawLine(xcenter, ycenter - 1, xm, ym);
        g.drawLine(xcenter - 1, ycenter, xm, ym);
        g.drawLine(xcenter, ycenter - 1, xh, yh);
        g.drawLine(xcenter - 1, ycenter, xh, yh);
        lastxs = xs;
        lastys = ys;
        lastxm = xm;
        lastym = ym;
        lastxh = xh;
        lastyh = yh;
    }

    public void start() {
        if (timer == null) {
            timer = new Thread(this);
            timer.start();
        }
    }

    public void stop() {
        timer = null;
    }

    public void run() {
        while (timer != null) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException ie) {
            }
            repaint();
        }
        timer = null;
    }

    public void update(Graphics g) {
        paint(g);
    }
   
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值