import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import javax.swing.*; public class Main extends JFrame implements ActionListener { //*3 Timer callback /** * State of the animation, just a counter */ private int frameNumber = 1; //*1 Frame counter private Canvas canvas; public static void main (String [] args) { java.awt.EventQueue.invokeLater (new Runnable() { public void run() { new Main (); } }); } public Main () { // Window setup setSize (500, 500); setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); // Put a Canvas in canvas = new Canvas (this); add (canvas); setVisible (true); // Start timer Timer timer = new Timer (100, this); // 100 milliseconds //*2 Timer timer.start(); //*2 } public int getFrameNumber () { return frameNumber; } //*1 // Like a clock tick public void actionPerformed (ActionEvent e) { //*3 frameNumber++; //*3 canvas.repaint (); //*3 } }