19.7 JButton lernt dazu |
|
Erben |
Im Sinne der Modularisierung und der
inneren Logik einer objektorientierten Sprache ist die RechnerGUI nicht
zufrieden stellend. Warum soll in der GUI abgefragt werden, welches Button
ein Ereignis meldet und die Ereignisse dann Button-spezifisch behandelt
werden? Nahe liegender wäre es doch, wenn das Button selbst
'sein' Ereignis behandelt, und es müsste doch selbst wissen,
wann es gedrückt wurde. Ein JButton-Objekt, wie es von Java angelegt ist, kann das aber nicht. Wir müssen
ein 'intelligentes' Button, das das kann, was wir uns wünschen, selbst
implementieren, was übrigens viel leichter ist als man zunächst annimmt. Wir nützen
nämlich aus, dass Java erlaubt, fertige Klassen zu beerben. Gehen wir
Schritt für Schritt vor, um zu lernen, wie man eine Klasse von einer
anderen erben lassen kann.
Nennen wir unsere neue Button-Klasse JButtonQuadGl um auszudrücken, dass
sie alle Eigenschaften hat, die auch die Klasse JButton hat, aber
zusätzlich auf das Anklicken eines eines seiner Instanzen die Werte a, b
und c aus den Eingabefenstern der GUI liest und die Lösung der
Quadratischen Gleichung |
Kopf der neuen Klasse |
public class
JButtonQuadGL extends JButton { ... } Mit dem reservierten Wort
extends
gefolgt vom Namen der Klasse
JButton, teilen wir dem
Kompiler mit, dass JButtonQuadGl
JButton
beerbt. Alle Attribute und alle Methoden der Klasse
JButton
sind nun auch Attribute bzw. Methoden der Klasse
JButtonQaudGL,
so, als wären sie hier implementiert. |
der neue Kopf |
public class
JButtonQuadGL extends JButton implements ActionListener{ ... public void actionPerformed(ActionEvent e){ ... } } Schauen wir uns zunächst den gesamten Quelltext an und kommentieren danach einzelne wichtige Stellen.
|
Klasse JButtonQuadGL
Download: |
|
Kommentare |
Unser
JButtonQuadGL-Objekt
muss das RechnerGUI-Objekt
kennen, damit er dessen Eingabefelder auslesen und in sein Ausgabefeld
schreiben kann. Wir deklarieren deshalb einen
rechner
als RechnerGUI-Objekt.
Damit ist die Verbindung noch nicht geknüpft, das geschieht, wie wir gleich noch sehen werden im Konstruktor:
Die Parameterliste des Konstruktors
enthält zwei Parameter. Zunächst einen, in dem wir die Beschriftung unsers
Buttons übergeben und zweitens den GUI-Rechner. Beim letzten wird also die
Verknüpfung mit der RechnerGUI geschaffen. Wir kommen jetzt zur
Methode
actionPerformed(ActionEvent e).
Sie sieht der schon von der alten
rechnerGUI-Klasse
bekannten ziemlich ähnlich. Der Wert für a
wird aus dem Textfeld
eingabeFeldA des übergeben
Objektes rechner
gelesen: Statt
eingabeFeldA.getText();
schreiben wir jetzt:
rechner.eingabeFeldA.getText();.
Die bei diesem Aufruf gelieferte Zeichenkette wird der Double-Klassenmethode
parseDouble(String name)
übergeben, die, falls die Eingabe sinnvoll war, einen
Double-Wert
liefert, der schließlich in a
abgelegt wird. |
Die neue rechnerGUI (mit nur einem Button) |
|
Erstes Merkmal: |
Die Klasse
rechnerGUI
implementiert nicht mehr das Interface
ActionListener;
das macht jetzt der neue Button. Somit entfällt auch die Implementierung
der Methode
actionPerformed(ActionEvent e). |
Zweites Merkmal: |
Die Deklaration ist angepasst. |
Drittes Merkmal: |
Beim Aufruf des Konstruktor JButtonQuaGL(String name, rechnerGUI rechner) für die Erzeugung des JButtonQuadGL-Objekts wird, wie schon oben erwähnt, zuerst die Beschriftung für den Button und an zweiter Stelle das rechnerGUI-Objekt, das die Eingabe- und Ausgabefelder hat, übergeben. Diese Object ist aber das aufrufende Objekt, weshalb wir this übergeben. In
wird der qglButton beim ActionListener angemeldet und als Paramter das Objekt übergeben, das auf das Ereignis reagieren soll, das ist in unserem Fall wieder qglButton.
|
zu 19.8 | Klassenhierarchie des neuen Rechners |
zur Startseite | www.pohlig.de (C) MPohlig 2003 |