paintComponent-Aufruf bei JComponent

Ich habe eine Frage zu Beni’s und Roar’s Zeichenprogramm: dort gibt es die Klasse PictureComponent mit der Methode paintComponent(). Kann mir jemand sagen wann diese Methode aufgerufen wird? Ist es evtl. so, dass das repaint() in den anderen Methoden (zB setPicture) die Methode paintComponent aufruft und somit veranlaßt, dass JComponent neu gezeichnet wird?

package gui;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;

import javax.swing.JComponent;

import core.FactoryListener;
import core.Figure;
import core.FigureFactory;
import core.Picture;
import core.PictureListener;

public class PictureComponent extends JComponent implements
		PictureListener, FactoryListener{
	
	private Picture picture;
	
	private FigureFactory factory;
	
	private Color color;
	
	public PictureComponent(){}
	
	public void paintComponent(Graphics g){
		if(picture != null){
			g = g.create(0, 0, picture.getWidth(), picture.getHeight());
			picture.paint(g);
			
			if(factory != null){
				factory.paint(g);
			}
		}
	}

	public void setPicture(Picture picture){
		if(this.picture != null){
			this.picture.removePictureListener(this);		
		}
		this.picture = picture;
		if(picture != null){
			picture.addPictureListener(this);
			setPreferredSize(new Dimension(picture.getWidth(),
					picture.getHeight()));
		}
		if(factory != null){
			factory.setPicture(picture);
			factory.setActive(picture != null);
		}
		repaint();
	}
	
	public void setFactory(FigureFactory factory){
		if(this.factory != null){
			this.factory.setActive(false);
			this.factory.removeFactoryListener(this);
			
			removeMouseListener(this.factory);
			removeMouseMotionListener(this.factory);
		}
		this.factory = factory;
		if(factory != null){
			factory.setPicture(picture);
			factory.setActive(picture != null);
			factory.setColor(color);
			
			factory.addFactoryListener(this);
			addMouseListener(factory);
			addMouseMotionListener(factory);
		}
		repaint();
	}
	
	public void setColor(Color color){
		this.color = color;
		if(factory != null){
			factory.setColor(color);
		}
	}
	
	public void figureAdded(Figure figure, Picture picture){
		repaint();
	}
	public void figureRemoved(Figure figure, Picture picture){
		repaint();
	}
	public void shouldRepaint(FigureFactory factory){
		repaint();
	}
	
}

Ein Frame erfährt durch die Umgebung irgendwann mal das er neugezeichnet werden muss, z.B. wenn über dem Fenster was lag oder die Größe geändert wird. Dann wird paint aufgerufen und durch diese wird paintComponent aufgerufen. Repaint erzwingt den Aufruf von paint.

Siehe auch: http://wiki.byte-welt.de/wiki/Malen_in_Swing_Teil_1:_der_grundlegende_Mechanismus