// BunsenAnimatorPanel.java
// JPanel dedicated to drawing and animating the beard
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class BunsenAnimatorPanel extends JPanel implements ActionListener {
        protected ImageIcon beard[ ]; 
        protected int currentImage = 0;  // subscript of the current image
        protected int totImages = 24; // total number of images
        protected int delay = 40;       // 40 millisecond delay between events
        protected Timer animationTimer;

        public BunsenAnimatorPanel( ) {
                // load the images when the applet begins
                beard = new ImageIcon[ totImages ];  // creates the array

                for ( int i = 0; i < beard.length; i++ )
                        beard[ i ] = new ImageIcon( "images/bunsen" + i + ".jpg" );

                startAnimation( );      
        }

        public void actionPerformed( ActionEvent e ) {
                repaint( );
        }

        public void startAnimation( ) {
                if ( animationTimer == null ) {
                        currentImage = 0;
                        animationTimer = new Timer( delay, this );
                        animationTimer.start( );
                }
                else
                        if ( !animationTimer.isRunning( ) )
                                animationTimer.restart( );
        }

        public void stopAnimation( ) {
                animationTimer.stop( );
        }

        public void paintComponent( Graphics g ) {
                super.paintComponent( g );

                if ( beard[ currentImage ].getImageLoadStatus( ) == MediaTracker.COMPLETE ) {
                        beard[ currentImage ].paintIcon( this, g, 0, 0 );
                        currentImage = ++currentImage % totImages;
                }
        }
}