java ----- clock & clockdemo

本文介绍两个使用 Java 实现的时钟程序案例:一个是基于 Swing 的桌面时钟应用,能够实时更新显示当前时间;另一个是基于 Applet 的网页时钟程序,同样实现了动态更新时间的功能。这两个案例不仅展示了如何用 Java 处理时间数据,还介绍了如何绘制时钟界面。

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

Demo1

clock

import javax.swing.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.*;
import java.util.Calendar;
import java.util.GregorianCalendar;

class Clock extends JFrame implements ActionListener {

	int x, y, x0, y0, r, h, olds_x, olds_y, oldm_x, oldm_y, oldh_x, oldh_y, ss, mm, hh, old_m, old_h, ang;
	final double RAD = Math.PI / 180;

	public Clock() {
		super("Clock by kikiwawa");
		setDefaultCloseOperation(3);
		setSize(300, 300);
//		setBackground(Color.BLACK);
		setLocation(300, 150); //窗体大小
		setResizable(false);  //设置不可缩放
		setVisible(true);
		int delay = 1000;		//	窗口刷新频率

		ActionListener drawClock = new ActionListener() {
			public void actionPerformed(ActionEvent evt) {
				repaint();
			}
		};

		new Timer(delay, drawClock).start(); 
	}

	public void actionPerformed(ActionEvent e) {
	}

	public void paint(Graphics g) {
		Graphics2D g2D = (Graphics2D) g;
		Insets insets = getInsets();
		int L = insets.left / 2, T = insets.top / 2;
//		h = getSize().height;
//		g.setColor(Color.white);

//		g2D.setStroke(new BasicStroke(4.0f));
//		g.drawOval(L + 40, T + 40, h - 80, h - 80);
//		r = h / 2 - 40;
//		x0 = 40 + r - 5 + L;
//		y0 = 40 + r - 5 - T;
//		ang = 60;
//
//		for (int i = 1; i <= 12; i++) {
//			x = (int) ((r + 10) * Math.cos(RAD * ang) + x0);
//			y = (int) ((r + 10) * Math.sin(RAD * ang) + y0);
//			g.drawString("" + i, x, h - y);
//			ang -= 30;
//		}

		Calendar now = new GregorianCalendar();
		int nowh = now.get(Calendar.HOUR_OF_DAY);
		int nowm = now.get(Calendar.MINUTE);
		int nows = now.get(Calendar.SECOND);
		String st;
		if (nowh < 10)
			st = "0" + nowh;
		else
			st = "" + nowh;
		if (nowm < 10)
			st += ":0" + nowm;
		else
			st += ":" + nowm;
		if (nows < 10)
			st += ":0" + nows;
		else
			st += ":" + nows;

		g.setColor(Color.pink); //数字时钟的底色
		g.fillRect(L, T, 50, 28); //数字时钟的底色大小
		g.setColor(Color.blue); //数字时钟
		g.drawString(st, L + 2, T + 26); //数字时钟的显示位置

//		ss = 90 - nows * 6;
//		mm = 90 - nowm * 6;
//		hh = 90 - nowh * 30 - nowm / 2;
//		x0 = r + 40 + L;
//		y0 = r + 40 + T;
//
//		if (olds_x > 0) {
//			g.setColor(getBackground());
//			g.drawLine(x0, y0, olds_x, h - olds_y);
//		} else {
//			old_m = mm;
//			old_h = hh;
//		}

//		x = (int) (r * 0.9 * Math.cos(RAD * ss)) + x0;
//		y = (int) (r * 0.9 * Math.sin(RAD * ss)) + y0 - 2 * T;
//		g.setColor(Color.yellow);
//		g.drawLine(x0, y0, x, h - y);
//		olds_x = x;
//		olds_y = y;
//		g2D.setStroke(new BasicStroke(2.2f));
//
//		if (old_m != mm) {
//			g.setColor(getBackground());
//			g.drawLine(x0, y0, oldm_x, h - oldm_y);
//		}
//
//		x = (int) (r * 0.7 * Math.cos(RAD * mm)) + x0;
//		y = (int) (r * 0.7 * Math.sin(RAD * mm)) + y0 - 2 * T;
//		g.setColor(Color.green);
//		g.drawLine(x0, y0, x, h - y);
//		oldm_x = x;
//		oldm_y = y;
//		old_m = mm;
//		g2D.setStroke(new BasicStroke(3.4f));
//
//		if (old_h != hh) {
//			g.setColor(getBackground());
//			g.drawLine(x0, y0, oldh_x, h - oldh_y);
//		}
//
//		x = (int) (r * 0.5 * Math.cos(RAD * hh)) + x0;
//		y = (int) (r * 0.5 * Math.sin(RAD * hh)) + y0 - 2 * T;
//		g.setColor(Color.red);
//		g.drawLine(x0, y0, x, h - y);
//		oldh_x = x;
//		oldh_y = y;
//		old_h = hh;
	}

	public static void main(String[] args) {
		Clock c = new Clock();
	}
}

Demo2

clockDemo

package clockdemo;

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

public class ClockDemo extends Applet implements Runnable {
	Thread timer;
	int lastxs, lastys, lastxm, lastym, lastxh, lastyh;
	SimpleDateFormat fm;
	String lastdate;
	Font clockFaceFont;
	Date currentDate;
	Color handColor;
	Color numberColor;

	public void init() {
		int x, y;
		lastxs = lastys = lastxm = lastym = lastxh = lastyh = 0;
		fm = new SimpleDateFormat("yyyy EEE MMM dd hh:mm:ss");
		currentDate = new Date();
		lastdate = fm.format(currentDate);
		clockFaceFont = new Font("Serif", Font.PLAIN, 14);
		handColor = Color.blue;
		numberColor = Color.darkGray;
		try {
			setBackground(new Color(Integer.parseInt(getParameter("bgcolor"), 16)));
		} catch (Exception E) {
		}
		try {
			handColor = new Color(Integer.parseInt(getParameter("fgcolor1"), 16));
		} catch (Exception E) {
		}
		try {
			numberColor = new Color(Integer.parseInt(getParameter("fgcolor1"), 16));
		} catch (Exception E) {
		}
		resize(200, 200);
	}

	public void plotpoints(int x0, int y0, int x, int y, Graphics g) {
		g.drawLine(x0 + x, y0 + y, x0 + x, y0 + y);
		g.drawLine(x0 + y, y0 + x, x0 + y, y0 + x);
		g.drawLine(x0 + y, y0 - x, x0 + y, y0 - x);
		g.drawLine(x0 + x, y0 - y, x0 + x, y0 - y);
		g.drawLine(x0 - x, y0 - y, x0 - x, y0 - y);
		g.drawLine(x0 - y, y0 - x, x0 - y, y0 - x);
		g.drawLine(x0 - y, y0 + x, x0 - y, y0 + x);
		g.drawLine(x0 - x, y0 + y, x0 - x, y0 + y);
	}

	public void circle(int x0, int y0, int r, Graphics g) {
		int x, y;
		float d;
		x = 0;
		y = r;
		d = 5 / 4 - r;
		plotpoints(x0, y0, x, y, g);
		while (y > x) {
			if (d < 0) {
				d = d + 2 * x + 3;
				x++;
			} else {
				d = d + 2 * (x - y) + 5;
				x++;
				y--;
			}
			plotpoints(x0, y0, x, y, g);
		}
	}

	public void paint(Graphics g) {
		int xh, yh, xm, ym, xs, ys, s = 0, m = 10, h = 10, xcenter, ycenter;
		String today;
		currentDate = new Date();
		SimpleDateFormat fm = new SimpleDateFormat("s", Locale.getDefault());
		try {
			s = Integer.parseInt(fm.format(currentDate));
		} catch (NumberFormatException n) {
			s = 0;
		}
		fm.applyPattern("m");
		try {
			m = Integer.parseInt(fm.format(currentDate));
		} catch (NumberFormatException n) {
			m = 10;
		}
		fm.applyPattern("h");
		try {
			h = Integer.parseInt(fm.format(currentDate));
		} catch (NumberFormatException n) {
			h = 10;
		}
		fm.applyPattern("EEE MMM dd HH:mm:ss yyyy");
		today = fm.format(currentDate);
		xcenter = 80;
		ycenter = 55;
		xs = (int) (Math.cos(s * 3.14f / 30 - 3.14 / 2) * 45 + xcenter);
		ys = (int) (Math.sin(s * 3.14f / 30 - 3.14 / 2) * 45 + ycenter);
		xm = (int) (Math.cos(m * 3.14f / 30 - 3.14 / 2) * 40 + xcenter);
		ym = (int) (Math.sin(m * 3.14f / 30 - 3.14 / 2) * 40 + 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(clockFaceFont);
		g.setColor(handColor);
		circle(xcenter, ycenter, 50, g);

		g.setColor(numberColor);
		g.drawString("9", xcenter - 45, ycenter + 3);
		g.drawString("3", xcenter + 40, ycenter + 3);
		g.drawString("12", xcenter - 5, ycenter - 37);
		g.drawString("6", xcenter - 3, ycenter + 45);

		g.setColor(getBackground());
		if (xs != lastxs || ys != lastys) {
			g.drawLine(xcenter, ycenter, lastxs, lastys);
			g.drawString(lastdate, 5, 125);
		}
		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(numberColor);
		g.drawString("", 5, 125);
		g.drawString(today, 5, 125);
		g.drawLine(xcenter, ycenter, xs, ys);
		g.setColor(handColor);
		g.drawLine(xcenter, ycenter - 1, xm, ym);
		g.drawLine(xcenter, 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;
		lastdate = today;
		currentDate = null;
	}

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

	public void stop() {
		timer = null;
	}

	public void run() {
		Thread me = Thread.currentThread();
		while (timer == me) {
			try {
				Thread.currentThread().sleep(1000);
			} catch (InterruptedException e) {
			}
			repaint();
		}
	}

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




表盘式时钟,并显import java.awt.*; import java.awt.event.*; import javax.swing.*; import sun.util.calendar.Gregorian; import java.util.Calendar; import java.util.GregorianCalendar; public class Clock extends JFrame implements ActionListener{ int x, y, x0, y0, r, h, olds_x, olds_y, oldm_x, oldm_y, oldh_x, oldh_y, ss,mm,hh,old_m,old_h,ang; final double RAD = Math.PI/180; public Clock(){ super(&quot;Java时钟&quot;); setDefaultCloseOperation(3); Image image = getToolkit().getImage(&quot;clock.gif&quot;); setIconImage(image); setSize(200,200); setBackground(Color.black); setLocation(300,150); setResizable(false); show(); int delay = 1000; //创建一个监听事件 ActionListener drawClock = new ActionListener(){ public void actionPerformed(ActionEvent evt){ repaint(); } }; //创建一个时间计数器,每一秒触发一次 new Timer(delay,drawClock).start(); } //实现ActionListener接口必须实现的方法 public void actionPerformed(ActionEvent evt){} //绘制图形 public void paint(Graphics g){ Graphics2D g2D = (Graphics2D)g; Insets insets = getInsets(); int L = insets.left/2, T = insets.top/2; h = getSize().height; g.setColor(Color.white); //画圆 g2D.setStroke(new BasicStroke(4.0f)); g.drawOval(L+40, T+40, h-80, h-80); r = h/2 - 40; x0 = 40 + r - 5 + L; y0 = 40 + r - 5 - T; ang = 60; //绘制时钟上的12个字 for(int i = 1;i &lt;= 12;i ++){ x = (int)((r+10)*Math.cos(RAD*ang)+x0); y = (int)((r+10)*Math.sin(RAD*ang)+y0); g.drawString(&quot;&quot;+i, x, h-y); ang -=30; } //获得现在的时间 Calendar now = new GregorianCalendar(); int nowh = now.get(Calendar.HOUR_OF_DAY); int nowm = now.get(Calendar.MINUTE); int nows = now.get(Calendar.SECOND); String st; if(nowh &lt; 10)st = &quot;0&quot;+nowh; else st = &quot;&quot;+nowh; if(nowm&lt;10)st += &quot;:0&quot;+nowm; else st += &quot;:&quot;+nowm; if(nows&lt;10)st += &quot;:0&quot;+nows; else st += &quot;:&quot;+nows; //在窗体上显示时间 g.setColor(Color.pink); g.fillRect(L, T, 50, 28); g.setColor(Color.blue); g.drawString(st,L+2,T+26); //计算时间与度数的关系 ss = 90 - nows*6; mm = 90 - nowm*
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值