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