© 2004 Pohlig - Taulien Ereignissteuerung Swing © 2004 Pohlig - Taulien Auf Button-Klick reagieren GK Informatik mit Java 2 © 2004 Pohlig - Taulien Auf Button-Klick reagieren Schaltfläche „rot“ geklickt GK Informatik mit Java 3 © 2004 Pohlig - Taulien Auf Button-Klick reagieren Schaltfläche „grün“ geklickt GK Informatik mit Java 4 © 2004 Pohlig - Taulien Auf Button-Klick reagieren Schaltfläche „neutral“ geklickt GK Informatik mit Java 5 © 2004 Pohlig - Taulien Auf Button-Klick reagieren GK Informatik mit Java 6 © 2004 Pohlig - Taulien Auf Button-Klick reagieren Programm beendet GK Informatik mit Java 7 © 2004 Pohlig - Taulien Delegation Event Model Seit Java 1.1 gibt es das „Delegation Event Model“, d.h. Schaltflächen, Fenster, usw. können Ereignisse wie ActionEvent („Schaltfläche gedrückt“), WindowEvent („Fenster aktiviert“, „Fenster geschlossen“, ...), MouseEvent („Mausknopf gedrückt“, „Maus bewegt“, ...) usw. auslösen. Das Senden von Ereignissen macht jedoch nur Sinn, wenn es zu jedem Ereignis auch einen entsprechenden Empfänger (z.B. JFrame) gibt, der auf die Ereignisse reagieren kann. Deshalb muss sich ein Empfänger beim Sender registrieren. Das geschieht immer nach dem Muster Sender.addXYZListener(Empfänger); Der Empfänger muss für jede Ereignisart entsprechende Methoden bereitstellen, die diese Ereignisse behandeln (actionPerformed, windowActivated, windowClosed, mouseKlicked, mouseMoved, ...). GK Informatik mit Java 8 © 2004 Pohlig - Taulien Delegation Event Model Beispiel: Ein Programm enthält eine Schaltfläche jbKlick, die Aktionsereignisse (ActionEvent) auslösen kann, und eine Klasse MeinKlickAbhorcher, die für die Ereignisbehandlung zuständig ist. Dann kann sich MeinKlickAbhorcher bei der Schaltfläche jbKlick mit jbKlick.addActionListerner(new MeinKlickAbhorcher()); als Empfänger beim Sender jbKlick registrieren. MeinKlickAbhorcher muss dabei die Methode actionPerformed implementieren. GK Informatik mit Java 9 © 2004 Pohlig - Taulien Delegation Event Model Oft ist es zu aufwändig, eigene Klassen zur Ereignisbehandlung zu schreiben. Dann kann z.B. ein JFrame selbst ein Ereignisempfänger sein. Das macht man, in dem der JFrame ein entsprechendes Interface zur Ereignisbehandlung implementiert: class MeinFrame extends JFrame implements ActionListener { ... Dann registriert sich MeinFrame beim Sender jbKlick mit der Anweisung jbKlick.addActionListener(this); JFrame muss die Methode actionPerformed implementieren. GK Informatik mit Java 10 © 2004 Pohlig - Taulien Grundgerüst mit Ereignissteuerung Das zugehörige Paket import java.awt.*; import javax.swing.*; import java.awt.event.*; Das Programm zu einem Aktionsabhorcher machen. public class JRotGelbGruen extends JFrame implements ActionListener { Im Konstruktor: … jbRot = new JButton("rot"); jbRot.addActionListener(this); … Den Aktionsabhorcher beim Button registrieren. public void actionPerformed(ActionEvent e) { überschreiben Object obj = e.getSource(); if (obj = = jbRot) jpButtons.setBackground(Color.RED); if (obj = = jbGelb) jpButtons.setBackground(Color.YELLOW); … Wer hat das Ereignis ausgelöst? … entstprechend reagieren.11 GK Informatik mit Java © 2004 Pohlig - Taulien Aufgabe Erweitern Sie das Programm „JRotGelbGruen“ zu „JRotGelbGruenMagenta“. GK Informatik mit Java 12