import java.awt.Graphics;
import java.util.Calendar;
import java.awt.Color;
/*类Clock继承了java.applet.Applet,并实现了Runnable接口,由于类Clock中需要使用Thread对象*/
public class Clock extends java.applet.Applet implements Runnable {
/*声明一个Thread对象*/
Thread threadObj;
/*下面的三个int变量表示时钟上一次显示时间的时、分和秒*/
int oldhours,oldminutes,oldseconds;
/*布尔变量boolVar用于控制时间的第一次显示*/
boolean boolVar = true;
/*在start()方法中对线程对象进行初始化,并启动线程*/
public void start() {
if(threadObj == null) {
/*实例化一个线程对象,线程的名称为Clock,线程的运行目标对象为当前类的对象*/
threadObj = new Thread(this, "Clock");
threadObj.start();
}
}
/*下面的run()方法每过一秒对当前的时间进行刷新*/
public void run() {
while(threadObj != null) {
try {
threadObj.sleep(1000);
} catch(InterruptedException e) {}
/*repaint方法用于时间的刷新显示*/
repaint();
}
}
/*paint方法获得当前的时间并将它显示出来*/
public void paint(Graphics g) {
Calendar now = Calendar.getInstance();
/*下面的三个语句用于获得当前时间的时、分和秒*/
int hours = now.get(now.HOUR_OF_DAY);
int minutes = now.get(now.MINUTE);
int seconds = now.get(now.SECOND);
//显示当前时间
//g.setColor(Color.black);
//g.drawString(hours + ":" + minutes + ":" + seconds, 60, 60);
//下面的if和else语句分别控制时间的第一次显示和后续显示。
if(boolVar == true){
//第一次显示时间时,不必进行刷新,直接显示时间就可以了
g.setColor(Color.black);
g.drawString(hours + ":" + minutes + ":" + seconds, 60, 60);
boolVar = false;
}
else{
//除了第一次以外,都需要在显示当前时间之前将上一次时间显示去掉
g.setColor(getBackground());
g.drawString(oldhours + ":" + oldminutes + ":" + oldseconds, 60, 60);
g.setColor(Color.black);
g.drawString(hours + ":" + minutes + ":" + seconds, 60, 60);
}
oldhours = hours;
oldminutes = minutes;
oldseconds = seconds;
}
/*update()方法用来刷新图象*/
public void update(Graphics g) {
paint(g);
}
/*停止线程的运行*/
public void stop() {
threadObj = null;
}
}
评论0