FileDocCategorySizeDatePackage
BouncingCircle.javaAPI DocExample2758Sat Jan 24 10:44:34 GMT 2004je3.graphics

BouncingCircle

public class BouncingCircle extends Applet implements Runnable
An applet that displays a simple animation

Fields Summary
int
x
int
y
int
r
int
dx
int
dy
Thread
animator
volatile boolean
pleaseStop
Constructors Summary
Methods Summary
public voidanimate()
This method moves (and bounces) the circle and then requests a redraw. The animator thread calls this method periodically.

	// Bounce if we've hit an edge.
	Rectangle bounds = getBounds();
	if ((x - r + dx < 0) || (x + r + dx > bounds.width)) dx = -dx;
	if ((y - r + dy < 0) || (y + r + dy > bounds.height)) dy = -dy;

	// Move the circle.
	x += dx;  y += dy;

	// Ask the browser to call our paint() method to draw the circle
	// at its new position.
	repaint();
    
public voidpaint(java.awt.Graphics g)
This method simply draws the circle at its current position

  // A flag to ask the thread to stop
    
               
        
	g.setColor(Color.red);
	g.fillOval(x-r, y-r, r*2, r*2);
    
public voidrun()
This method is from the Runnable interface. It is the body of the thread that performs the animation. The thread itself is created and started in the start() method.

	while(!pleaseStop) {           // Loop until we're asked to stop
	    animate();                       // Update and request redraw
	    try { Thread.sleep(100); }       // Wait 100 milliseconds
	    catch(InterruptedException e) {} // Ignore interruptions
	}
    
public voidstart()
Start animating when the browser starts the applet

	animator = new Thread(this);   // Create a thread
	pleaseStop = false;            // Don't ask it to stop now
	animator.start();              // Start the thread.
	// The thread that called start now returns to its caller.
	// Meanwhile, the new animator thread has called the run() method
    
public voidstop()
Stop animating when the browser stops the applet

	// Set the flag that causes the run() method to end
	pleaseStop = true;