home *** CD-ROM | disk | FTP | other *** search
/ Java Developer's Companion / Java Developer's Companion.iso / documentation / tutorial / example / AniArea.java < prev    next >
Encoding:
Java Source  |  1997-07-13  |  3.8 KB  |  118 lines

  1. /*
  2.  * Copyright (c) 1995-1997 Sun Microsystems, Inc. All Rights Reserved.
  3.  *
  4.  * Permission to use, copy, modify, and distribute this software
  5.  * and its documentation for NON-COMMERCIAL purposes and without
  6.  * fee is hereby granted provided that this copyright notice
  7.  * appears in all copies. Please refer to the file "copyright.html"
  8.  * for further important copyright and licensing information.
  9.  *
  10.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
  11.  * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
  12.  * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
  13.  * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
  14.  * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
  15.  * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
  16.  */
  17. /*
  18.  * @(#)AniArea.java    1.4 95/10/13  
  19.  *
  20.  * Copyright (c) 1994-1995 Sun Microsystems, Inc. All Rights Reserved.
  21.  *
  22.  * Permission to use, copy, modify, and distribute this software
  23.  * and its documentation for NON-COMMERCIAL or COMMERCIAL purposes and
  24.  * without fee is hereby granted. 
  25.  * Please refer to the file http://java.sun.com/copy_trademarks.html
  26.  * for further important copyright and trademark information and to
  27.  * http://java.sun.com/licensing.html for further important licensing
  28.  * information for the Java (tm) Technology.
  29.  * 
  30.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
  31.  * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
  32.  * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
  33.  * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
  34.  * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
  35.  * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
  36.  * 
  37.  * THIS SOFTWARE IS NOT DESIGNED OR INTENDED FOR USE OR RESALE AS ON-LINE
  38.  * CONTROL EQUIPMENT IN HAZARDOUS ENVIRONMENTS REQUIRING FAIL-SAFE
  39.  * PERFORMANCE, SUCH AS IN THE OPERATION OF NUCLEAR FACILITIES, AIRCRAFT
  40.  * NAVIGATION OR COMMUNICATION SYSTEMS, AIR TRAFFIC CONTROL, DIRECT LIFE
  41.  * SUPPORT MACHINES, OR WEAPONS SYSTEMS, IN WHICH THE FAILURE OF THE
  42.  * SOFTWARE COULD LEAD DIRECTLY TO DEATH, PERSONAL INJURY, OR SEVERE
  43.  * PHYSICAL OR ENVIRONMENTAL DAMAGE ("HIGH RISK ACTIVITIES").  SUN
  44.  * SPECIFICALLY DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTY OF FITNESS FOR
  45.  * HIGH RISK ACTIVITIES.
  46.  */
  47.  
  48. import java.awt.Graphics;
  49. import java.util.StringTokenizer;
  50. import java.awt.Image;
  51. import java.net.URL;
  52. import java.net.MalformedURLException;
  53.  
  54. /**
  55.  * This ImageArea provides for a button that animates when the mouse is
  56.  * over it. The animation is specifed as a base image that contains all
  57.  * of the animation frames and then a series of X,Y coordinate pairs that
  58.  * define the top left corner of each new frame.
  59.  *
  60.  * @author    Chuck McManis
  61.  * @version    1.4, 13 Oct 1995
  62.  */
  63. class AniArea extends ImageMapArea {
  64.  
  65.     Image sourceImage;
  66.     int     nFrames;
  67.     int  coords[];
  68.     int     currentFrame = 0;
  69.  
  70.     public void handleArg(String s) {
  71.     StringTokenizer st = new StringTokenizer(s, ", ");
  72.     int    i;
  73.         String imgName;
  74.  
  75.     imgName = st.nextToken();
  76.     try {
  77.     sourceImage = parent.getImage(
  78.             new URL(parent.getDocumentBase(), imgName));
  79.     } catch (MalformedURLException e) {}
  80.  
  81.     nFrames = 0;
  82.     coords = new int[40];
  83.  
  84.     while (st.hasMoreTokens()) {
  85.         coords[nFrames*2]     = Integer.parseInt(st.nextToken());
  86.         coords[(nFrames*2)+1] = Integer.parseInt(st.nextToken());
  87.         nFrames++;
  88.         if (nFrames > 19)
  89.         break;
  90.     }
  91.     }
  92.  
  93.     public boolean animate() {
  94.     if (entered) {
  95.         repaint();
  96.     }
  97.     return entered;
  98.     }
  99.  
  100.     public boolean enter() {
  101.     currentFrame = 0;
  102.     parent.startAnimation();
  103.     return false;
  104.     }
  105.  
  106.     public void highlight(Graphics g) {
  107.     if (entered) {
  108.         drawImage(g, sourceImage, 
  109.               X-coords[currentFrame*2], Y-coords[(currentFrame*2)+1],
  110.               X, Y, W, H);
  111.         currentFrame++;
  112.         if (currentFrame >= nFrames)
  113.         currentFrame = 0;
  114.     }
  115.     }
  116. }
  117.  
  118.