ButtonApp2: Main.java

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

/**
 * Main program for Button3
 */
public class Main extends JFrame {
    /** The squares */
    private Square square1, square2;

    public static void main (String [] args) {
	java.awt.EventQueue.invokeLater (new Runnable() {
            public void run() {
		new Main ();
            }
        });
    }

    public Main () {
	// Window setup
	setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
	setSize (500, 500);
	setLayout (new BorderLayout());

	// Our canvas
	Canvas canvas = new Canvas (this);
	add (canvas, BorderLayout.CENTER);

	/*
	 * Now create the square and its associated buttons
	 */
	square1 = new Square (canvas); //*1 Square 1 and its buttons

	// Control panel for the square
	JPanel controls1 = new JPanel ();
	controls1.setBorder (new LineBorder(Color.BLUE));
	controls1.setLayout (new FlowLayout());

	// Create our buttons by instantiating them
	// turns out we don't need to remember them,
	// just to add() them to panel layout
	controls1.add (new ButtonLeft (square1)); //*1
	controls1.add (new ButtonRight (square1)); //*1
	controls1.add (new ButtonBigger (square1)); //*1
	controls1.add (new ButtonSmaller (square1)); //*1
	controls1.add (new ButtonFill (square1)); //*1

	/*
	 * Another square
	 */
	square2 = new Square (canvas); //*2 Ditto Square 2
	
	JPanel controls2 = new JPanel ();
	controls2.setBorder (new LineBorder(Color.BLUE));
	controls2.setLayout (new FlowLayout());
	
	// Create our buttons
	controls2.add (new ButtonLeft (square2)); //*2
	controls2.add (new ButtonRight (square2)); //*2
	controls2.add (new ButtonBigger (square2)); //*2
	controls2.add (new ButtonSmaller (square2)); //*2
	controls2.add (new ButtonFill (square2)); //*2

	// Need a grid container to hold our 2 panels
	JPanel controls = new JPanel ();
	controls.setLayout (new GridLayout(2, 1));
	controls.add (controls1);
	controls.add (controls2);
	add (controls, BorderLayout.SOUTH);

	setVisible (true);
    }

    public void drawSquares (Graphics g) { //*3 Canvas calls us to do the job
	// For each square (this could be an array)
	square1.draw (g); //*4 We call the Squares
	square2.draw (g); //*4
    }
}

[download file]