# super.paintComponent(g);



## kulturfenster (6. Jan 2009)

Liebes Forum,
Ich habe ein Programm geschrieben, welches einen Kreis über den Bildschirm wandern lässt. das Gerüst sieht wie folgt aus:

```
public class MyProg extends JPanel {
   ...
   public void paintComponent(Graphics g) {
          super.paintComponent(g);
          ....
    }
}
```

Kann mir jemand erklären, wieso zuerst noch die Superklasse aufgerufen werden muss? Was hat dies zur Folge?
Wenn man es NICHT tut, hat es folgende Aufwirkungen auf das Programm:
- die Hintergrundfarbe wird nicht angezeigt, welche ich zuvor im Konstruktor definiert habe.
- der Kreis wird nie gelöscht, so dass ein langer Balken entsteht, wenn man die x-Koordinate inkrementiert


----------



## hdi (6. Jan 2009)

Mit *super* kann man sich auf die Vaterklasse beziehen.
D.h. super.paintComponent(g) ruft die Methode paintComponent(g) von der Vaterklasse auf.

Und die Standard-Implementation dieser Methode der Klasse JPanel löscht ganz einfach den kompletten
Inhalt des Panels.

Deswegen wird der Kreis auch nicht gelöscht, wenn du das weglässt - du _übermalst_ immer nur,
und malst nicht _neu_.


----------



## André Uhres (6. Jan 2009)

Unterklassen von Swingkomponenten, die einen UI Delegate haben (im Gegensatz zu direkten Unterklassen von JComponent), sollten super.paintComponent() innerhalb ihrer paintComponent Überschreibung aufrufen. Dabei geschieht folgendes:
   1.  paint() ruft paintComponent() auf.
   2. Wenn die "ui" Eigenschaft nicht "null" ist, ruft paintComponent() ui.update() auf.
   3. Wenn die "opaque" Eigenschaft der Komponente "true" ist, füllt ui.update() den Hintergrund der Komponente mit der Hintergrundfarbe und ruft ui.paint() auf.
   4. ui.paint() stellt den Inhalt der Komponente dar. 
Wenn aus irgendeinem Grund die Erweiterung der Komponente nicht zulassen möchte, daß der UI Delegate malt (wenn sie zum Beispiel die sichtbaren Elemente der Komponente vollständig ersetzt), kann sie den Aufruf von super.paintComponent() weglassen, aber sie ist dann für das Ausfüllen ihres eigenen Hintergrundes verantwortlich, wenn die "opaque" Eigenschaft "true" ist.


----------



## kulturfenster (6. Jan 2009)

ok, verstehe! Vielen Dank für die raschen Antworten!


----------

