Wie Beni nebenan (in deinem alten Thread) schon gesagt hat: Das der
paintComponent übergebene Graphics ist bereits ein Graphics2D oder
genauer: Es ist die Instanz einer Klasse die zusätzlich zu Graphics auch das
erweiterte Interface Graphics2D implementiert. Du hast also durch den Cast
auf Graphics2D mehr und feinere Funktionen zur Verfügung.
Früher (AWT) wurde ein BufferedImage benutzt um das Flackern beim Neuzeichnen
zu vermeiden, da direkt in das Monitor-Image gezeichnet wurde und zum
Beispiel beim langsamen Zeichnen einer Hilbert-Kurve das andauernde
Löschen des Hintergrunds zu sehen war. In den neuen (allen?) Swing-Versionen wird
standardmäßig double-Buffering verwendet. Das Image wird also erst in Ruhe
neu gezeichnet, bevor es dann auf einen Schlag ins Monitor-Image geklatscht wird.
Kein Flackern mehr.
Allerdings gibt es auch andere Anwendungen wo das Zeichnen in ein anderes
BufferedImage Sinn macht. Frag mich aber nicht was für Anwendungen das sind 🙁