ButtonApp4: Canvas.java

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

public class Canvas extends JPanel implements MouseListener {
    private Model model; //*1 Save model, to be provided later

    Canvas () {
	setBorder (new LineBorder(Color.BLUE));
	addMouseListener (this);
    }

    /**
     * Couldn't pass model in constructor,
     * cause it doesn't exist yet
     */
    public void setModel (Model model) { //*1
	this.model = model; //*1
    }

    /** Tell parent to do the job */
    public void paintComponent (Graphics g) { //*2 Just pass jobs to parent
	super.paintComponent(g);
	model.draw (g); //*2
    }

    /** MouseListener callbacks */
    public void mousePressed (MouseEvent event) { //*2
	// Tell parent to do the job
	model.doMouse (event.getPoint()); //*2
    }
    public void mouseClicked (MouseEvent event) {}
    public void mouseReleased (MouseEvent event) {}
    public void mouseEntered (MouseEvent event) {}
    public void mouseExited (MouseEvent event) {}
}

[download file]