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) {} }