import java.awt.*; import javax.swing.*; import java.util.concurrent.*; //*3 Use special thread-safe implementations /** * Main program for Threads demo */ public class Main extends JFrame { /** Our Row's */ private CopyOnWriteArrayList<Row> rows = new CopyOnWriteArrayList<Row> (); //*3 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); // Our canvas Canvas canvas = new Canvas (this); add (canvas); // Show our window setVisible (true); // Now create our Row's for (int i=0; i<5; i++) { //*1 Create our Row's and remember them in ivar Row r = new Row (new Rectangle (10, 100+i*75, 500-40, 40), canvas); //*1 rows.add (r); //*1 } } public void drawCanvas (Graphics g) { // Draw each of our Row's for (Row r: rows) r.draw (g); //*2 Draw each of our Row's } }