Clock.java
上传用户:njled888
上传日期:2007-01-07
资源大小:29k
文件大小:4k
源码类别:

游戏

开发平台:

Java

  1. /*
  2.  * @(#)Clock.java Version 1.0 98/03/12
  3.  * 
  4.  * Copyright (c) 1998 by Huahai Yang
  5.  * 
  6.  * Use at your own risk. I do not guarantee the fitness of this 
  7.  * software for any purpose, and I do not accept responsibility for 
  8.  * any damage you do to yourself or others by using this software.
  9.  * This file may be distributed freely, provided its contents 
  10.  * are not tampered with in any way.
  11.  *
  12.  */
  13. import java.awt.*;
  14. import java.awt.event.ActionListener;
  15. import java.awt.event.ActionEvent;
  16. import java.awt.AWTEvent;
  17. import java.awt.AWTEventMulticaster;
  18. /**
  19.  * a clock, update once per second, fire action when time limit
  20.  * is reached
  21.  */
  22. public class Clock extends Canvas implements Runnable
  23. {
  24.    ActionListener actionListener = null;
  25.    String actionCommand;
  26.    Thread clockThread = null;
  27.    int timeLimit,
  28.        timeUnit,
  29.        timer;
  30.        
  31. Dimension offScreenDimension;
  32. Image offScreenImage;
  33. Graphics offScreenGraphics;
  34.    
  35.    public Clock(int limit)
  36.    {
  37.       timeUnit = 1000;
  38.       timeLimit = limit;
  39.       timer = 0;
  40.    } // 1 param constructor
  41.    public Clock(int unit, int limit)
  42.    {
  43.       timeUnit = unit;
  44.       timeLimit = limit;
  45.       timer = 0;
  46.    } // 2 param constructor
  47.    
  48.    public void setTimeLimit(int limit)
  49.    {
  50.       timeLimit = limit;
  51.    } // setTimeLimit
  52.    
  53.    public int getTimeLimit()
  54.    {
  55.       return timeLimit;
  56.    } // getTimeLimit   
  57.    
  58.    public int getTime()
  59.    {
  60.       return timer;
  61.    } //getTime   
  62.    private void createOffScreen()
  63.    {
  64.       // create offscreen context
  65.       Dimension d = size();
  66.       if ( (offScreenGraphics == null)
  67.             || (d.width != offScreenDimension.width)
  68.             || (d.height != offScreenDimension.height) ) 
  69.       {
  70.          offScreenDimension = d;
  71.          offScreenImage = createImage(d.width, d.height);
  72.          offScreenGraphics = offScreenImage.getGraphics();
  73.       } // if
  74.    } //createOffScreen
  75.    
  76.    public Dimension getPreferredSize()
  77.    {
  78.       return getMinimumSize();
  79.    } // getPreferredSize
  80.    public Dimension getMinimumSize()
  81.    {
  82.       return new Dimension(80, 50);
  83.    } // getMinimumSize
  84.    public void start()
  85.    {
  86.       if (clockThread == null)
  87.       {
  88.          clockThread = new Thread(this, "Clock");
  89.       } // if
  90.       clockThread.start();
  91.    } // start
  92.    
  93.    public void stop()
  94.    {
  95.       clockThread = null;
  96.       timer = 0;
  97.       repaint();
  98.    } //stop
  99.    
  100.    public void run()
  101.    {
  102.    Thread myThread = Thread.currentThread();
  103.       while (clockThread == myThread)
  104.       {
  105.          repaint();
  106.          if(timeLimit == timer++)
  107.          {
  108.             //time limit reached, fire action
  109.             sourceActionEvent();
  110.          } //if
  111.          try
  112.          {
  113.             Thread.sleep(timeUnit);
  114.          } // try
  115.          catch (InterruptedException e)
  116.          {
  117.          } // catch
  118.       } //while
  119.    } //run
  120.    public void paint(Graphics g) 
  121.    {
  122.       update(g);
  123.    } // paint
  124.    
  125.     public void update(Graphics g) 
  126.     {
  127.       createOffScreen(); 
  128.       
  129.       // Erase the previous image.
  130.       offScreenGraphics.setColor(getBackground());
  131.       offScreenGraphics.fillRect(0, 0, size().width, size().height);
  132.       
  133.       // draw clock
  134.       offScreenGraphics.drawOval(0, 0, 50, 50);
  135.       offScreenGraphics.setColor(new Color(128, 128, 192));
  136.       offScreenGraphics.fillOval(0, 0, 50, 50);
  137.       
  138.       offScreenGraphics.setColor(Color.red);
  139.       offScreenGraphics.drawLine( 25, 0, 25, 25 );
  140.       offScreenGraphics.drawArc( 0, 0, 49, 49, 90, 
  141.          360 * timer / timeLimit );
  142.       offScreenGraphics.fillArc( 0, 0, 49, 49, 90, 
  143.          360 * timer / timeLimit );
  144.       
  145.       //Paint the image onto the screen.
  146.       g.drawImage(offScreenImage, 0, 0, this);
  147.       
  148.    } // update
  149.    
  150. public void addActionListener(ActionListener l)
  151. {
  152.    actionListener = AWTEventMulticaster.add(actionListener, l);
  153. } // addActionListener
  154. public void removeActionListener(ActionListener l)
  155. {
  156.    actionListener = AWTEventMulticaster.remove(actionListener, l);
  157. } // removeActionListener
  158. public void setActionCommand(String command)
  159.     {
  160.        actionCommand = command;
  161.     } //setActionCommand
  162.    public void sourceActionEvent()
  163. {
  164. if (actionListener != null)
  165. {
  166.    actionListener.actionPerformed(new ActionEvent(this, ActionEvent.ACTION_PERFORMED, actionCommand));
  167. } //if
  168. } // sourceActionEvent
  169. } // Clock