Timed Motion Animation

// Rotate.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class Rotate extends JPanel 
                        implements ActionListener {
    //Set up animation parameters.
    static final int FPS_INIT = 30;    //initial frames per second
	int radius = 70;
	double theta = 0.0;
	double delta = 360.0/120;
	int x, y;
	int delay;
    Timer timer;
    boolean frozen = false;

    static ImageIcon picture;

    public Rotate() {
        delay = 1000 / FPS_INIT;
        //Set up a timer that calls this object's action handler.
        timer = new Timer(delay, this);
		timer.setInitialDelay(0);
        timer.setCoalesce(true);
    }

	public void paintComponent(Graphics g)
	{
		super.paintComponent(g);
		picture.paintIcon(this,g,x,y);
	}

 
    public void startAnimation() {
        //Start (or restart) animating!
        timer.start();
        frozen = false;
    }

    public void stopAnimation() {
        //Stop the animating thread.
        timer.stop();
        frozen = true;
    }

    //Called when the Timer fires
    public void actionPerformed(ActionEvent e) {
		final double radians_per_degree=0.017453292;
		double arc;
		Dimension rect = getSize();

		theta += delta;
		if (theta>360.0+delta/2.0) theta = delta;
		arc = radians_per_degree*theta;

		x = (int)(rect.width/2 + radius*Math.cos(arc));
		y = (int)(rect.height/2 + radius*Math.sin(arc));
		x -= picture.getIconWidth()/2;
		y -= picture.getIconHeight()/2;
		repaint();
    }

    public static void main(String[] args)
	{
		String str = (args.length>0? args[0]: "java_85.gif");
		picture = new ImageIcon(str);
		if (picture==null) System.exit(1);
        final Rotate animator = new Rotate();
		JFrame frame = new JFrame("Rotate");
		frame.setContentPane(animator);
		//Add a listener for window events
		frame.addWindowListener(new WindowAdapter() {
			public void windowIconified(WindowEvent e) {
				animator.stopAnimation();
			}
			public void windowDeiconified(WindowEvent e) {
				animator.startAnimation();
			}
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}  
		});
       frame.setSize(300,300);
       frame.show();
       animator.startAnimation();
    }
}

Source: Rotate.java

Default image:


Maintained by John Loomis, last updated 20 June 2000