Das Stichwort, das hier am schnellsten und einfachsten helfen würde (bzw. schon geholfen hätte) wurde schon genannt: KSKB. Wenn man dein Programm einfach rauskopieren, compilieren und starten könnte, würde man erstens das Problem deutlicher sehen als "da wird was gezeichnet, was ich nicht will", und zweitens (wichtig) würde man erkennen, wer wann welche Methode von wo aus aufruft.
Bis dahin nur ein Tipp: Du darst das Ausrechnen nicht in der run-Methode des Applets machen, sondern NUR in irgendwelchen Listener-Methoden, z.B. in der ActionPerformed von irgendeinem Button. Dann blockiert zwar das GUI solange er rechnet, und das ist eigentlich schei*, aber deinen Ausführungen nach ja genau das, was du willst.
Um noch genauer zu werden:
Diese beiden Aktivitäten kommen sich also in die Quere
Das ist das allgemeine, omnipräsente Problem, das mit dem Event-Dispatch-Thread gelöst werden soll. Nochmal: Wenn man eine Swing-Anwendung hat, läuft da dieser Event-Dispatch-Thread. Der kümmert sich um das Zeichnen, und um die Verarbeitung von Events (z.B. von Button-Klicks). Und es gibt die Regel, die frei übersetzt lautet:
Alles, was irgendwie den Zustand der Swing-Oberfläche verändert, oder vom Zustand der Swing-Oberfläche abhängt, muss vom Event-Dispatch-Thread gemacht werden!
Genaueres dazu auf Threads and Swing
Das Ziel, das man mit dieser Regel erreichen will, ist genau das, was DU erreichen willst: Wenn nur EIN Thread die Veränderungen macht, passiert automatisch "immer hübsch eines nach dem anderen".