//
// This sample for practice Java GUI Event Delegation Model(4).
// With 2 defined class to implement one event.
//
import java.applet.Applet;
import java.awt.event.*;
import java.awt.*;

public class CanvasExample extends Applet{
	public void init() {
		String melBlank[]={"Bug", "Porky", "Daffy", "Cat"};
		setLayout(new GridLayout(2,2));
		for(int i=0; i<melBlank.length; i++)
			add(new DraggingCanvas(melBlank[i]));
	}
}

class DraggingCanvas extends Canvas implements MouseMotionListener{
	private int posX=25;
	private int posY=25;
	private String label;
	DraggingCanvas(String txt) {
		label=txt;
		addMouseMotionListener(this); // this object of DraggingCanvas
	}
	public void paint(Graphics g) {
		g.drawString(label, posX+25, posY+15);
		g.drawArc(posX, posY, 100, 25, 0, 360);
	}
	public void mouseMoved(MouseEvent evt) {};
// Needed to be implemented since inside MouseMotionLister
// it is defined as one abstract method
	public void mouseDragged(MouseEvent evt) {
		posX=evt.getX();
		posY=evt.getY();
		repaint();
		// paint(getGraphics());
	}
}
