import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*; //*1 Use ArrayList
/**
* The "model" (vs. user interface) part of this program
*/
public class Model {
/** Model or application data */
private ArrayList<Square> squares = new ArrayList<Square> (); //*1
private boolean drawX = false; //*3 Handle drawing background X
private Canvas canvas;
private Square current; //*2 We tell Square if it's current or not
public Model (int n, Canvas canvas) {
// Stash ivar
this.canvas = canvas;
// Create the n objects
for (int i=0; i<n; i++) { //*1
squares.add (new Square(canvas)); //*1
}
// Initialize to some arbitrary square so current is never null
current = squares.get(0); //*1
}
public void draw (Graphics g) { //*3
// The background X
if (drawX) { //*3
Dimension size = canvas.getSize(); //*3
g.drawLine (0, 0, size.width, size.height); //*3
g.drawLine (0, size.height, size.width, 0); //*3
}
// Enumerate our list
for (Square s: squares) { //*1
// N.B. (s==current) is a boolean expr,
// evaluates to true or false
s.draw (g, s==current); //*2
}
}
public void setX (boolean newX) { //*3
drawX = newX; //*3
canvas.repaint(); //*3
}
Square getCurrent () {
return current;
}
public void doMouse (Point p) { //*2
for (Square s: squares) { //*2
if (s.isInside(p)) { //*2
current = s; //*2
break; //*2
}
}
canvas.repaint();
}
}