21.4.3 Die
Zeichenfläche für einen Button und Polymorphie |
|
Eigene Zeichenfläche | Wir
fügten unserem Button eine Zeichenfläche zu, die das übergebene Bild
aufnimmt. Unser Panel, wir nenne es
ButtonPanel
erbt von JPanel.
|
Download: ButtonPanel.java |
|
Polymorphie | An der
Parameterliste des Konstruktors erkennt man, dass zur Anlage eines
Objektes von ButtonPanel ein Objekt des Typs image erwartet wird. Die
Methode paintComponent(Graphics
g) wird automatisch aufgerufen,
wenn sich an der grafischen Darstellung etwas geändert hat. Im ersten
Moment denkt man, dass ein erneutes Zeichnen nicht nötig ist. Nun kann
aber unser Fenster von einem Fenster einer anderen Anwendung kurzfristig
überdeckt werden, so dass beim Wiederaufdecken das Neuzeichnen nötig wird.
Das alles wird komfortabel in der Methode
paintComponent(Graphics g)wie
sie in der Klasse JComponent
implementiert vor liegt. Unsere Klasse
ButtonPanel
erbt diese Methode über JPanel
von JComponent.
Die geerbte Methode
paintComponent(Graphics g) soll
um das Hinzufügen des Bildes -
g.drawImage(bild,0,0,this)-
erweitert werden. Da wir aber jetzt im Begriff sind, diese Methode
zu überschreiben, würden wir die ganze Funktionalität von
paintComponent(Grahics g)
verlieren, wenn wir nicht die unverfälschte Methode mit
super.paintComponent(Graphics g)
aufrufen würden. Mit
super
haben wir eine Referenz auf die Superklasse, also die Klasse, von der
unsere Klasse direkt erbt also
JPanel. Damit haben wir die
alte Methode in ihrer Funktionalität erweitert. Das hat zur Folge, dass
das was die Methode
paintComponent(Grahics g)
leistet, von ihrem Kontext ab. Wir sprechen in diesem Zusammenhang von
Polymorphie. |
Klassen- hierarchie |
Die
Grafik macht den Zusammenhang beim Vererben noch einmal deutlich. Die
Methode paintComponent(...)
wird an JPanel
vererbt, steht dort zur Verfügung, ohne neu implementiert werden zu
müssen. Da ButtonPanel
von JPanel
erbt, steht auch dort diese Methode
paintComponent(...)
zur Verfügung. Hier aber überschreiben wir diese Methode, die geerbte
verliert damit hier ihre Gültigkeit. Die Funktionalität der alten 'retten'
wir, in dem wir die neue Methode die alte, das ist
paintComponent(...)
in JPanel ausführen lassen. Der Aufruf einer überschrieben Methode
geschieht mit
super.paintComponent(...).
|
Wiederverwend-barkeit | Die Klasse ButtonPanel ist so angelegt, dass sie nicht nur für das Button CaesarButton, sondern für jedes andere selbst geschrieben Button verwendet werden kann, um dieses mit einem Bild zu versehen. |
zur Startseite | www.pohlig.de (C) MPohlig 2003 |