clock3.java

来自「wangshangkandaode ~~~ ~~~~`」· Java 代码 · 共 296 行

JAVA
296
字号
import java.awt.*; 

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

import java.applet.*; 

  

public class clock3 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){ }//没有进行例外处理 

      } 

   } 

}

⌨️ 快捷键说明

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