ButtonApp4Debug (other files are same as before): Square.java

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

/**
 * Holds part of the Model data
 */
public class Square { //*4 Unit test code goes here
    /** Classvar to generate unique positions for each instance */
    static private int squareCount = 0;

    /** Enumerated type for which action to take on a square */
    public enum ButtonAction {LEFT, RIGHT, BIGGER, SMALLER};

    private Canvas canvas;

    /** Info about the square */
    private Rectangle loc;

    /**
     * Standalone unit test for Square class.
     * Not called in normal usage,
     * run it separately with "java Square"
     */
     public static void main (String[] args) { //*4
	// Need a dummy object here for testing
	Canvas canvas = new Canvas ();

	ArrayList<Square> squares = new ArrayList<Square> (); //*1 Create some squares
	for (int i=0; i<10; i++) { //*1
		squares.add (new Square(canvas)); //*1
	}

	for (Square s: squares) { //*2 Print them out
	    System.out.println ("Square at " + s.loc); //*2
	    if (s.isInside (new Point (50, 50))) { //*2
		System.out.println ("50,50 is inside"); //*2
	    }
	}

	squares.get(0).doAction (ButtonAction.BIGGER); //*3 Test some actions, print again
	squares.get(1).doAction (ButtonAction.RIGHT); //*3
	squares.get(2).doAction (ButtonAction.LEFT); //*3
	squares.get(2).doAction (ButtonAction.SMALLER); //*3

	
	System.out.println ("");
	for (Square s: squares) { //*3
	    System.out.println ("Square at " + s.loc); //*3
	    if (s.isInside (new Point (50, 50))) { //*3
		System.out.println ("50,50 is inside"); //*3
	    }
	}
    }
    
    public Square (Canvas canvas) {
	this.canvas = canvas;

	// Keep count
	squareCount++;

	// Initial values
	loc = new Rectangle (30*squareCount, 10*squareCount, 50, 50);
    }

    public void draw (Graphics g, boolean isCurrent) {
	Graphics2D g2 = (Graphics2D) g;

	if (isCurrent)g2.fill (loc);
	else g2.draw (loc);
    }

    public boolean isInside (Point p) {
	return loc.contains (p);
    }

    public void doAction (ButtonAction action) {
	if (action==ButtonAction.LEFT) loc.x -= 10;
	else if (action==ButtonAction.RIGHT) loc.x += 10;
	else if (action==ButtonAction.BIGGER) { loc.width += 10; loc.height += 10; }
	else if (action==ButtonAction.SMALLER) { loc.width -= 10; loc.height -= 10; }

	canvas.repaint();
    }
}

[download file]