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 } }