⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 goodclock.java

📁 用Java实现的动态显示时间
💻 JAVA
字号:
//写一个时钟小程序

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

public class GoodClock extends Applet implements Runnable{//使用多线程
	private int hour;
	private int minute;
	private int second;
	private Color col;
//	private int x;
//	private int y;
	int[][] sec = new int[60][2];//秒针终点的坐标
	int[][] min = new int[60][2];//分针终点坐标
	int[][] hou = new int[60][2];//时针终点坐标
	
	//相当于一个构造方法
	public void init(){
		point();//初始化p数组 把每个时间指针应指向的终点坐标存入数组
	}

	public void start(){
		Thread s = new Thread(this){
										public void run(){//匿名内部类 重写run方法 
											int i = 0;
											while(true){
												Color[] c ={Color.RED,Color.GREEN,Color.BLUE};//每秒变一次颜色  红绿蓝
												col = c[i];
												i = (i+1)%3;
												GregorianCalendar gre = new GregorianCalendar();
												second = gre.get(gre.SECOND);
												repaint();
												try{
													Thread.sleep(1000);//休眠1秒
												}catch(Exception e){}	
											}
										}
									};//秒针的线程
		Thread m = new Thread(this){
										public void run(){
											//对分针初始化
											GregorianCalendar greg = new GregorianCalendar();
											minute = greg.get(greg.MINUTE);
											repaint();
											while(true){//秒针一圈 移动分针
												if(second == 0){
													GregorianCalendar gre = new GregorianCalendar();
													minute = gre.get(gre.MINUTE);
													repaint();
													try{
														Thread.sleep(1000*60);//休眠一分钟
													}catch(Exception e){}
												}	
											}
										}
									};
		Thread h = new Thread(this){
										public void run(){
											//对时针初始化
											GregorianCalendar greg = new GregorianCalendar();
											hour = (greg.get(greg.HOUR)%12)*5+minute/12;
											repaint();
											while(true){//分针转12分钟 移动时针
												if(minute%12 == 0){
													GregorianCalendar gre = new GregorianCalendar();
													hour = (gre.get(gre.HOUR)%12)*5+minute/12;// 注意小时的转换
													repaint();
													try{
														Thread.sleep(1000*60*12);//休眠12分钟
													}catch(Exception e){}
												}
											}
										}
									};
		s.start();
		m.start();
		h.start();
	}

	//计算三角函数 指针终点坐标 并存入数组
	public void point(){
		int secondLength = 80;//秒针的长度
		int minuteLength = 65;//分针的长度
		int hourLength = 50;//时针的长度
		double[][] p = new double[60][2];//存储各个角度的三角函数值
		for(int i=0;i<60;i++){//这里从0开始
			p[i][0] = Math.sin((Math.PI/30)*((60-(i-30))%60));
			p[i][1] = Math.cos((Math.PI/30)*((60-(i-30))%60));
		}
		for(int i=0;i<60;i++){
			sec[i][0] = (int)(110+secondLength*p[i][0]);
			sec[i][1] = (int)(110+secondLength*p[i][1]);
			min[i][0] = (int)(110+minuteLength*p[i][0]);
			min[i][1] = (int)(110+minuteLength*p[i][1]);
			hou[i][0] = (int)(110+hourLength*p[i][0]);
			hou[i][1] = (int)(110+hourLength*p[i][1]);
		}
	}
	
	//画上时间刻度  和 边框
	/*public void drawNumber(Graphics g){
		g.setColor(col);
		g.drawOval(20,20,180,180);//画出表的边框(圆的中心坐标是110 110半径是90)
		g.drawString("12",106,40);
		g.drawString("3",185,110);
		g.drawString("6",108,190);
		g.drawString("9",30,110);
	}*/
	
	public void paint(Graphics g){	//究竟是谁调用的paint??????
		//drawNumber(g);为什么这样调用浏览器里不会显示边框和刻度?  但是appletveiwer确可以?
		g.setColor(col);
		g.drawOval(20,20,180,180);//画出表的边框(圆的中心坐标是110 110半径是90)
		g.drawString("12",106,40);
		g.drawString("3",185,110);
		g.drawString("6",108,190);
		g.drawString("9",30,110);
		g.setColor(Color.darkGray);
		g.drawLine(110,110,sec[second][0],sec[second][1]);//画秒针
		g.drawLine(110,110,min[minute][0],min[minute][1]);//画分针
		g.drawLine(110,110,hou[hour][0],hou[hour][1]);//画时针
	}

	public void run(){//空的方法 不写不行。。。。
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -