/**
 * RepaintApplet2a.java
 * A somewhat better approach than RepaintApplet1.java.
 * update() is overriden to prevent it covering everything with the background color
 * before calling paint(). The overriden version just calls paint() only.
 * So every mouse release leaves a circle. 
 */

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;

public class RepaintApplet2a extends Applet {
   int mouseX = -10; 
   int mouseY = -10; 

    public void init() {
	addMouseListener(new HandleMouse());
	setBackground(Color.yellow);
    }
    
    class HandleMouse extends MouseAdapter {
	public void mouseClicked(MouseEvent e) {
	    Graphics g = getGraphics();
	    mouseX = e.getX();
	    mouseY = e.getY();
	    update(g);        // Calls update directly: not a good idea
	}
    }
    
    // override update
    public void update(Graphics g) {
	paint(g);
    }
    
    public void paint(Graphics g) {
	g.setColor(Color.red);
	g.fillOval(mouseX-10, mouseY-10, 20, 20);
    }
    
}