Hola:
Para dibujar bien y que no se te borren las cosas, debes heredar del componente sobre el que quieras dibujar (en tu caso un JPanel) y redefinir el método paint(). Ahí debes dibujar con el Graphics que te pasen y no llames al dispose().
Aquí tienes un
ejemplo básico de pintado en java.
Se bueno.