animateButton




import java.applet.*;
import java.awt.*;
import java.net.*;

class Animate extends Thread
{
  animateButton b;

  public Animate(animateButton who)
  {
    b = who;
  }

  public void run()
  {
    while(b.running)
    {
	b.advanceFrame();
  	b.repaint();
	try
	{
	  sleep(b.sleeptime);
	}
	catch(Exception e){}
    }
  }
}

public class animateButton extends Applet
{
  int nframe;
  Image image[];
  AudioClip audio;
  URL url;
  String target;
  int sleeptime;
  MediaTracker tracker;
  Animate animate;
  int frame;
  boolean running;

  private Image offScreenImage;
  private Dimension offScreenSize;
  private Graphics offScreenGraphics;

  public void advanceFrame()
  {
	frame = (frame + 1) % nframe;
  }

  public void init()
  {
	String parameter;

	// init number of frames
	parameter = getParameter("nframe");
	if (parameter == null)
	  System.out.println("Error: invalid parameter: nframe");
	else
	  nframe = Integer.parseInt(parameter);

	// init images
	image = new Image[nframe];
	tracker = new MediaTracker(this);
	for (int i = 0; i < nframe; i++)
	{
	  parameter = getParameter("image"+i);
	  if (parameter == null)
	    System.out.println("Error: invalid parameter: image"+i);
	  else
	  {
	    image[i] = getImage(getDocumentBase(), parameter);
	    tracker.addImage(image[i], i);
	  }
	}
	try
	{
	  tracker.waitForAll();
	}
	catch (InterruptedException e)
	{
	  System.out.println("Error waiting for image to load.");
	}

	// init audio
	parameter = getParameter("audio");
	if (parameter != null)
	  audio = getAudioClip(getDocumentBase(), parameter);

	// init url
	parameter = getParameter("url");
	if (parameter != null)
	{
	  try
	  {
	    url= new URL(parameter);
	  }
	  catch(MalformedURLException mal)
	  {
	    System.out.println("Error locating URL address.");
	  }
	}

	// init target window
	target = getParameter("target");

	// init sleep time
	parameter = getParameter("sleeptime");
	if (parameter == null)
	  sleeptime = 1000;
	else
	  sleeptime = Integer.parseInt(parameter);	  
  }

  public void paint (Graphics g)
  {
    g.drawImage(image[frame], 0, 0, null);    
  }

  public final synchronized void update (Graphics g)
  {
    Dimension d = size();
    if((offScreenImage == null) || (d.width != offScreenSize.width) ||  (d.height != offScreenSize.height))
    {
      offScreenImage = createImage(d.width, d.height);
      offScreenSize = d;
      offScreenGraphics = offScreenImage.getGraphics();
    }
    offScreenGraphics.setColor(getBackground());
    offScreenGraphics.fillRect(0, 0, d.width, d.height);
    paint(offScreenGraphics);
    g.drawImage(offScreenImage, 0, 0, null);
  }

  public void stop()
  {
	running = false;
	destroy();
  }

  public boolean mouseDown(Event evt, int x, int y)
  {
	if (audio != null)
          audio.play();
	return true;
  }
  public boolean mouseUp(Event evt, int x, int y)
  {
	if (url != null)
	{
	  if (target != null)
	    getAppletContext().showDocument(url, target);
	  else
	  getAppletContext().showDocument(url);
	}
	return true;
  }

  public boolean mouseEnter(Event evt, int x, int y)
  {
	running = true;
        animate = new Animate(this);
        animate.start();
	return true;
  }

  public boolean mouseExit(Event evt, int x, int y)
  {
	running = false;
	return true;
  }
}

Back to the animateButton applet page

How to Add Java Applets to Your Site

New on the Java Boutique:

New Review:

Time Management Made Easy with the Quartz Enterprise Job Scheduler
Why not just use the Java timer API? This open source scheduling API boasts simplicity, ease-of-integration, a well-rounded feature set, and it's free!

New Applet:

Reverse Complement
Reverse Complement is a simple applet that converts DNA or RNA sequences into three useful formats.

Elsewhere on internet.com:

WebDeveloper Java
Lots of Java information on webdeveloper.com

WDVL Java
Thorough Java resource at the Web Developer's Virtual Library.

ScriptSearch Java
Hundreds of free Java code files to download.

jGuru: Your View of the Java Universe
Customizable portal with online training, FAQs, regular news updates, and tutorials.