Methodenaufruf

Bitte aktiviere JavaScript!
Einen schönen guten Abend,

Preisfrage. Bei folgendem Code wird ein JFrame mit einem JPanel erzeugt. In dem JPanel wird ein Rechteck gezeichnet.
Aber wo wird die Methode paintComponent denn überhaupt aufgerufen?
Also ich habe den Preis nicht gewonnen, denn ich finde hier keinen Methodenaufruf wie beispielsweise
g.paintComponent (Graphics g).

Macht das der EDT automatisch?

Code:
public class GfxDemo extends JPanel {

    @Override
    protected  void paintComponent(Graphics g) {
        super.paintComponent(g);
        
        g.setColor(new Color (255,127,0,127));
        g.fillRect(5, 5, 100, 100);
        
    }
     public static void main(String[] args) {
        
         SwingUtilities.invokeLater(new Runnable() {
             @Override
             public void run() {
             JFrame f = new JFrame();
             f.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
            
             GfxDemo g = new GfxDemo();
             g.setPreferredSize(new Dimension (500,500));
            
            
             f.add(g);
             f.pack();
             f.setLocation(850, 250);
             f.setVisible(true);
             }
         });
    }
    
}
 
Also da Du ja sauber die @Overwrites Annotationen setzt, hast Du doch gemerkt, dass paintComponent überschrieben wird.

Das bedeutet, dass in einer der Klassen, von der Deine Klasse erbt, diese Methode bereits definiert hat. Das macht aber doch nur dann Sinn, wenn diese Methode auch irgendwo aufgerufen und verwendet wird....

Daraus sollte schon etwas klar sein, dass da irgend etwas mit ist.

Dann kann man sich die Dokumentation ansehen, z.B. unter https://docs.oracle.com/javase/7/docs/api/javax/swing/JPanel.html und dann finden wir auch zu der Methode eine Dokumentation. Dies allerdings nicht direkt, denn wir finden erst einmal, dass JPanel diese Methode von JComponent erbt.
Da bekommen wir in Kürze paar Hinweise. Diese beziehen sich aber natürlich ehr auf die Nutzung, also hier was beim Überschreiben zu beachten ist.

Aber nun wollen wir die Details finden - also schauen wir doch einmal in Sourcen: Wir suchen einfach mal nach JComponent Source und finden dann z.B.
http://developer.classpath.org/doc/javax/swing/JComponent-source.html
Dort können wir dann im Detail schauen, wo paintComponent benutzt wird. So wird dies z.B. von paint und paintDoubleBuffered verwendet (und noch in printComponent).
So Ausflüge finde ich durchaus recht interessant, denn da findet man dann z.B. auch oft Erklärungen für Verhalten. In paint findet man viel Code und der Aufruf paintComponent kommt nur in einem else vor. Wenn er alles in einem Buffer hat, dann nutzt er einfach den. Aber darum ging es jetzt hier nicht....

Mir ging es in der Antwort erst einmal um das logische Verständnis mit dem überschreiben von Methoden. Vorhandene Methoden werden in der Regel irgendwo benutzt..... Ansonsten hätte man diese auch einfach weglassen können ...
 
Passende Stellenanzeigen aus deiner Region:

Oben