Buttons und Action-Events
Du hast schon Erfahrung im Erstellen von Oberflächen gesammelt, aber keinen Schimmer, wie du diese jetzt für den Benutzer interagierbar machst? Das erfährst du jetzt!
Inhaltsübersicht
Events
Um das zu können, müssen wir erst eine sogenannte Ereignisbehandlung implementieren. Diese sorgt dafür, dass jede Benutzer-Aktion, für die wir das wollen, ein Ereignis auslöst.
In Fachsprache nennt man diese Ereignisse auch Events. Es gibt sie in verschiedenen Formen:
Ein Klick des Benutzers auf eine unserer Schaltflächen ist ein Action Event, ein Klick auf eine Komponente ein Mouse-Event. Tippt unser User auf der Tastatur, ist das ein Key-Event und wenn er die Fensterfunktionen, wie zum Beispiel schließen und Minimieren nutzt, dann ist das ein Window-Event.
Aber was ist eigentlich ein Event?
Events sind Java-Objekte, die Infos über Benutzeraktionen verarbeiten. Dazu gibt es in Java auch eine ganz eigene Vererbungshierarchie der Eventklassen.
Ereignisquellen
Damit ein Ereignis ausgelöst werden kann, braucht es aber zunächst eine Quelle. Ereignisquellen sind ebenfalls Java-Objekte, jedoch verwalten diese Listen von sogenannten ActionListenern und sind für Benutzerfunktionen zugänglich. Diese mysteriösen ActionListener sind wiederum nichts anderes, als eine weitere Art von Objekten, die auf ein Ereignis mit dem Ausführen einer Operation reagieren. Dabei gibt es für jede der Ereignisarten eine eigene Schnittstelle.
Wichtig ist, dass der ActionListener bei der Ereignisquelle angemeldet sein muss, damit das Ganze funktioniert. Das klingt jetzt zwar sehr abstrakt, aber du kannst es dir in etwa vorstellen, wie einen Notruf.
Anrufen von ActionListenern
Es passiert ein Unfall und du rufst die Polizei – aber dafür musst du natürlich deren Nummer kennen. Auch würdest du sie nicht anrufen, läge kein Notfall vor. Gäbe es Verletzte würdest du stattdessen eine Ambulanz rufen und wäre der Notfall ein Brand, würdest du die Feuerwehr wohl eher gebrauchen können.
In diesem Beispiel fungieren die Feuerwehr und die Polizei als verschiedene ActionListener, während die Notfälle die Event Typen repräsentieren. Das Anrufen der Listener ist ähnlich wie das Anmelden.
EventListener
Das Telefonbuch, dass all deine Telefonnummern verwaltet, ist die EventSource, denn sie verwaltet die Liste der EventListener. Außerdem dient sie gleichzeitig als Vermittlung, da sie, sobald eine Benutzerinteraktion erfolgt, ein EventObject erzeugt und für alle relevanten EventListener eine passende Operation aufruft.
Um einen EventListener hinzuzufügen, kannst du den addEventListener()-Befehl verwenden. Er meldet den Listener an.
Schauen wir uns doch mal ein Beispiel zur Einbindung eines Events an:
Einbinden des WindowListeners – Beispiel
Die einfachste und gleichzeitig wichtigste Einbindung ist die des WindowListeners. Das können wir ganz einfach im Konstruktor unserer Benutzeroberfläche machen.
Nun müssen wir ihn nur noch in einer separaten Klasse deklarieren, damit unser Programm ihn auch aufrufen kann.
Dafür müssen wir einen Konstruktor angeben und noch eine Eventbehandlungsfunktion, die auf unser Ereignis e reagiert. Sie sorgt später dafür, dass unser Fenster geschlossen werden kann und das Programm beendet wird.
Da wir das nun erledigt haben, können wir uns unserem Button zuwenden. Dieser soll beim Anklicken durch den Benutzer mit einer Datenbank verbinden. Hier geht es sowieso erst einmal nur um die Ereignisbehandlung an sich.
Damit unser Button anklickbar ist, fügen wir im Konstruktor einen ActionListener hinzu.
Anschließen des ActionListeners
Damit haben wir unseren ActionListener bei unserem Button angemeldet – oder um bei unserem Beispiel zu bleiben: Wir haben unserem Button die Telefonnummer des ActionListeners gegeben.
Damit wir diesen nun auch anrufen können, müssen wir seinen Anschluss allerdings erstmal einrichten.
Dazu deklarieren wir eine Klasse namens ActionListener1 und lassen sie einen Action Listener implementieren.
Dann müssen wir nur noch unsere Ereignisbehandlung einfügen, also ihn ans Telefon gehen lassen.
Dazu deklarieren wir, wie auch beim WindowListener eine actionPerformed Methode, die auf unser Ereignis e reagiert. Was genau diese tut, ist im Moment noch unerheblich, denn je nach gewünschter Funktion des Buttons kann ihr Inhalt variieren. Wenn wir jetzt auf unseren Button klicken, passiert genau das, was wir in die Funktion geschrieben haben.
Alle anderen GUI-Elemente lassen sich auf dieselbe Art verwalten. Du musst lediglich die passende Art von ActionListener einbinden.
Prima, unser GUI tut jetzt, was es soll. Damit kannst du nun offiziell deine eigenen Oberflächen gestalten. Viel Spaß dabei!