ちょっと質問します。

import java.awt.*;
import java.awt.event.*;
public class DotTest extends Canvas{
private DotTest(){
addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent me){
Graphics g = getGraphics();
// update(g);paint(g);
repaint();
g.fillRect(me.getX(), me.getY(), 5, 5);
}
});
Frame f = new Frame("DotTest");
f.add(this);
f.setSize(400,400);
f.setVisible(true);
}
public static void main(String[] args){
new DotTest();
}
}

マウスでクリックすると、そこが黒く描画され、
さらにクリックすると、先にクリックした点が消えてあらたな点が描画されるプログラムなのですが、
repaint()を使うとうまく描画されず、update(g)やpaint(g)を使うとうまくいくのはなぜでしょうか。