ButtonApp2: Canvas.java

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

/**
 * Canvas object
 */
public class Canvas extends JPanel implements MouseListener {
    private Main parent; //*1 Save parent for use in callback

    public Canvas (Main parent) {
	this.parent = parent; //*1
	setBorder (new LineBorder(Color.BLUE));
	addMouseListener (this);
    }

    /** Tell parent to do the job */
    public void paintComponent (Graphics g) { //*2 Catch the callback
	super.paintComponent(g);
	parent.drawSquares (g); //*3 And call parent to do the job
    }

    /** MouseListener callbacks */
    public void mousePressed (MouseEvent event) {	
	System.out.println ("Mouse down at " + event.getPoint().x + ", " + event.getPoint().y);
    }
    public void mouseClicked (MouseEvent event) {}
    public void mouseReleased (MouseEvent event) {}
    public void mouseEntered (MouseEvent event) {}
    public void mouseExited (MouseEvent event) {}
}
[download file]