FANDOM


Was ist ein Ereignis? Bearbeiten

  • Ein Event bezeichnet ein Ereignis, das vom Benutzer einer GUI ausgelöst wird, indem dieser z. B. auf einen Button mit der Maus klickt, den Mauszeiger auf einen Button führt oder eine Taste drückt.
  • Ein Event wird vom Betriebssystem an die zugehörige Anwendung weitergeleitet, die dieses Event nach einem bestimmten Modell verarbeitet. Dazu werden innerhalb der Anwendung oft „Callback“-Funktionen aufgerufen.
  • Eine Rückruffunktion bezeichnet in der Informatik eine Funktion, die einer anderen Funktion als Parameter übergeben wird, und von dieser unter gewissen Bedingungen aufgerufen wird.

Delegationsmodell Bearbeiten

In Java wird das Delegationsmodell verwendet, das auf dem Beobachter-Entwurfsmuster basiert:

  • Beobachter = Event-Listener
  • Subjekt = Event-Source

Die Event-Listener registrieren sich bei den Event-Sourcen, an deren Ereignisse sie interessiert sind:

Delegationsmodell 1

Das Auftreten eines Ereignisses in einer Event-Source stellt dann die Zustandsänderung dar, die die Benachrichtigung auslöst:

Delegationsmodell 2

Klassenhierachie Bearbeiten

Ereignisse werden als Objekte modelliert. Es existiert eine Klassenhierachie für die verschiedenen Ereignistypen. Die Idee bei dieser Ordnung ist, ähnliche Ereignisse zu Gruppen zusammen zu fassen. Andernfalls wäre jedes Event durch eine eigene Klasse repräsentiert.

Klassenhierarchie

Übersicht der Klassenhierarchie

  • Die Fenster senden unterschiedliche Events, wenn sie verkleinert oder geschlossen werden. Diese Events werden in der Klasse java.awt.event.WindowEvent zusammengefasst.
  • Die Interpretation von Tastatureingaben kann von zusätzlich zu der Eingabe gedrückten Zusatztasten abhängen, die in java.awt.event.KeyEvent definiert sind.

Namenskonvention Bearbeiten

  • Die verschiedenen Ereignisse/Events werden von der Basisklasse java.util.EventObject abgeleitet und enden im Namen auf Event.
  • Object getSource() ist die wichtigste Methode der Basisklasse und liefert die Ereignis-Quelle (Event-source)
  • Ist der Name eines Ereignisses <X>Event, ist der des zugehörigen Interfaces <X>Listener
  • Die Methoden zur (De-)Registrierung in den Event-Sources heißen
    • add<X>Listener(<X>Listener listener)
    • remove<X>Listener(<X>Listener listener) 

Ein Beispiel Bearbeiten

In diesem Kapitel wird eine Ereignisbehandlung von zwei Buttons anhand von Codeausschnitten dargestellt.

Bei der Erzeugung der Klasse ist besonders auf die Implementierung des Action-Listeners zu achten, um später auf Action-Events reagieren zu können.

CodeA

Erstellung der Klasse

Nun kann der Konstruktor definiert werden. Neben den beiden Buttons werden ein JFrame und ein JPanel erzeugt, damit die Buttons auch abgebildet werden können. Hierzu werden sie dem JPanel und dieses wiederum dem JFrame zugewiesen. Außerdem müssen die Buttons für die Ereignisbehandlung mittels addActionListener dem Listener zugeordnet werden. 

CodeB

Der Konstruktor

Abschließend wird die Methode actionPerformed implementiert, die bei Klick auf einen Button aufgerufen wird. Hier kann überprüft werden, welcher Button geklickt und welche Handlung nach dem klicken durchgeführt werden soll. In diesem Beispiel öffnet sich bei beiden Buttons ein Dialogfenster mit einer Warnmeldung.

CodeC

Die Methode actionPerformed

Anwendungen schließen Bearbeiten

Das Schließen des JFrame-Hauptfensters mit setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); sollte bei großen Applikationen nur zum Testen genutzt werden, da dieses Verhalten einem System.exit() entspricht und somit weder Datensicherung noch eine sonstige Konsolidierung der Daten stattfindet.

Stattdessen empfiehlt sich einen Event-Manager für das Schließen des Fensters zu implementieren. Das dazu genutzte Interface ist WindowListener und definiert zwei Methoden für das Schließen:

  • windowClosing(WindowEvente) wird ausgelöst, wenn das Fenster über das X in der Titelleiste, also über den Fenster-Manager, geschlossen wird. In diese Methode kann bspw. System.exit() oder ein Dialog mit Aufforderung zur Bestätigung implementiert werden.
  • Die zweite Methode windowClosed(WindowEvent e) wird ausgelöst, wenn die Applikation das Fenster mit dispose() schließt. Mit dispose() werden die Ressourcen freigegeben und das Fenster geschlossen. In windowClosed(WindowEvent e) können ebenfalls Maßnahmen zur Datensicherung etc. implementiert werden.