Timeout2 (other files are same as before): Canvas.java

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import javax.swing.*;

public class Canvas extends JPanel {
    /**
     * Our basic shape, in canonical orientation, centered at 0, 0
     */
    private Rectangle2D rect = new Rectangle2D.Double (-25, -25, 50, 50); //*2 Save canonical rectangle

    private Main parent;

    public Canvas (Main parent) {
	this.parent = parent;
    }

    public void paintComponent (Graphics g) { //*1 Redraw all boxes
	super.paintComponent(g);
	Graphics2D g2 = (Graphics2D) g;

	int nboxes = parent.getFrameNumber(); //*1

	for (int ibox=0; ibox<nboxes; ibox++) { //*1
	    g2.setTransform (new AffineTransform()); //*3 First, reset to identity
	    g2.translate (100+2*ibox, 100+2*ibox); //*4 Translate it somewhere (sets transform for whole g2)
	    g2.rotate (ibox/10.); //*5 Rotate about its center
	    g2.draw (rect); //*6 Then draw original box, with new transform
	}

	g2.setTransform (new AffineTransform()); //*7 Reset transform since we messed it up
    }
}
[download file]