站内搜索: 请输入搜索关键词

当前页面: 开发资料首页Java 专题java动画——电子小时钟

java动画——电子小时钟

摘要: java动画——电子小时钟
java动画——电子小时钟



// 程序:电子小时钟

// 范例文件:Clock.java



import java.awt.*;

import java.util.*; //为了使用其中的GregorianCalendar类

import java.applet.*;



public class Clock extends Applet implements Runnable

{

//=====资料成员

int hour,minute,second,ImageWidth,ImageHeight,X,Y,

width,height;

Image digit[],Background,OffScreen;

Thread newThread;

boolean showSeparator;

Graphics drawOffScreen;

MediaTracker MT;



GregorianCalendar time; //可用来获得时间与日期



//=====函数成员

public void init()

{

X = 50; //时间数字被绘制的起始位置

Y = 110;

MT = new MediaTracker(this);

digit = new Image[11];

width = 210; //重绘区域的大小

height = 135;



//使用MediaTracker追踪图像

Background = getImage(getDocumentBase(),"Images/clock.jpg");

MT.addImage(Background,0);



for(int i=0;i<11;i++)

{

digit[i] = getImage(getDocumentBase(),"Images/" + i + ".jpg");

MT.addImage(digit[i],0);

}



try

{

showStatus("图像加载中(Loading Images)...");

MT.waitForAll();

}

catch(InterruptedException E){ }



//获得图像的宽度与高度

ImageWidth = digit[0].getWidth(this);

ImageHeight = digit[0].getHeight(this);



//建立次画面

OffScreen = createImage(300,300);

drawOffScreen = OffScreen.getGraphics();



showSeparator = true; //显示时间分隔符

}



public void start() //start()函数

{

newThread = new Thread(this); //建立与启动新线程

newThread.start();

}



public void stop() //stop()函数

{

newThread = null; //将线程设为null

}

public void paint(Graphics g)
{

//只清除此部分区域的图像

drawOffScreen.clearRect(X,Y,width,height);



//绘制背景图像

drawOffScreen.drawImage(Background,0,0,this);



if(hour < 10) //绘制小时

{

drawOffScreen.drawImage(digit[0],X,Y,this);

drawOffScreen.drawImage(digit[hour],X+ImageWidth,Y,this);

}

else

{

drawOffScreen.drawImage(digit[hour/10],X,Y,this);

drawOffScreen.drawImage(digit[hour%10],X+ImageWidth,Y,this);

}



if(minute < 10) //绘制分钟

{



drawOffScreen.drawImage(digit[0],X+ImageWidth*2+10,Y,this);

drawOffScreen.drawImage(digit[minute],X+ImageWidth*3+10,Y,this);

}

else

{

drawOffScreen.drawImage(digit[minute/10],X+ImageWidth*2+10,Y,this);

drawOffScreen.drawImage(digit[minute%10],X+ImageWidth*3+10,Y,this);

}



if(second < 10) //绘制秒数

{

drawOffScreen.drawImage(digit[0],X+ImageWidth*4+15,

Y+ImageHeight-30,15,30,this);

drawOffScreen.drawImage(digit[second],X+ImageWidth*4+30,

Y+ImageHeight-30,15,30,this);

}

else

{

drawOffScreen.drawImage(digit[second/10],X+ImageWidth*4+15,

Y+ImageHeight-30,15,30,this);

drawOffScreen.drawImage(digit[second%10],X+ImageWidth*4+30,

Y+ImageHeight-30,15,30,this);

}



if(showSeparator) //绘制时间分隔符(闪烁效果)

drawOffScreen.drawImage(digit[10],X+ImageWidth*2,Y+10,this);



//将次画面贴到主画面中

g.drawImage(OffScreen,0,0,this);

}



public void update(Graphics g) //update()函数

{

paint(g); //只单纯调用paint()函数

}



public void run()

{

while(newThread != null) //动画循环

{

//time将包含目前系统的时间与日期

time = new GregorianCalendar();



//取出目前时间的小时、分钟和秒数

hour = time.get(Calendar.HOUR_OF_DAY);

minute = time.get(Calendar.MINUTE);

second = time.get(Calendar.SECOND);



if(second % 2 == 0) //控制时间分隔符的闪动

showSeparator = true;

else

showSeparator = false;



repaint(X,Y,width,height); //重新绘制图像

try

{

Thread.sleep(500); //暂停程序执行500毫秒

}

catch(InterruptedException E){ }//没有进行例外处理

}

}

}

这个例子是一个完整的电子时钟的例子,不想多说什么了,对于图片,0到9对应着数字0到9,图片10是中间的冒号。clock.jpg为边框。





↑返回目录
前一篇: java动画——使用过高的FPS
后一篇: java动画——游戏开头画面