Informatik für Ingenieure (InfIng) GUI – Graphical User Interface Doz. Dipl.-Ing. H. Hiller WS 2012/13 Unsere Kommunikation mit dem Computer… Immer wieder grafische Benutzeroberflächen Menüs, Ikons, etc. Auswahlboxen, Textfelder, Checkboxen, etc. Menü Radio-Button Texteingabefeld Check-Box Combo-Box Ikon-Leiste FH D Fachhochschule Düsseldorf Seite 2 Informatik für Ingenieure WS 2012/13 FB 5 Fachbereich Medien Themen dieser Vorlesung Wir wollen folgenden Fragen nachgehen: 1. "Womit können wir in Java eine GUI zaubern?" AWT/Swing 2. "Was eignet sich am besten für den Einstieg?" AWT FH D Fachhochschule Düsseldorf Seite 3 Informatik für Ingenieure WS 2012/13 FB 5 Fachbereich Medien Übersicht Einführung AWT AWT-Paket Container Komponenten Layout-Manager Event-Handling Ausblick FH D Fachhochschule Düsseldorf Seite 4 Informatik für Ingenieure WS 2012/13 FB 5 Fachbereich Medien Historisches 1973: Xerox Alto Erster Computer mit grafischer Oberfläche, Einsatz auf die Forschung begrenzt 1981: Xerox Star Erste kommerzielle Verwendung einer GUI 1983: Apple Lisa Basierend auf Inspirationen der Firma Xerox (Entwicklung wurde 1979 gestartet) 1984: Macintosh GUI entwickelt unter der Leitung von Steve Jobs 1985: MS Windows 1.0, Atari ST, Commodore Amiga Windows Version 1.03 praktisch nicht einsetzbar 1992: MS Windows 3.1 Erste brauchbare Windows-Version 2010: MS Windows 7, Mac OS X Leopard, etc. FH D Fachhochschule Düsseldorf Seite 5 Informatik für Ingenieure WS 2012/13 FB 5 Fachbereich Medien GUI (Graphical User Interface) Kommunikation Benutzer/Programm Interaktion zwischen Benutzer und Programm über grafische Elemente Umfasst Elemente wie Icons, Menüs, Eingabefelder, Combo-Boxen, etc. Steuerung der Elemente mit einem Zeigegeräte wie beispielsweise der Maus Ablösung der zeilenorientierten Kommunikation (CLI, Command Line Interface) Realisierung in Java Ursprüngliche mittels AWT (Abstract Windowing Toolkit) AWT konnte nicht alle Wünsche erfüllen, Hersteller entwickelten eigene Pakete – – Internet Foundation Classes (IFC) von Netscape Application Foundation Classes (AFC) von Microsoft Ablösung der proprietären Bibliotheken durch die Java Foundation Classes (JFC) Java Foundation Classes Gemeinschaftsprojekt der Firmen Sun, Netscape, IBM und Apple JDK1.2 (Java 2) enthält die JFC als integrierten Bestandteil (1998) AWT (Abstract Windowing Toolkit) ist in den JFC enthalten FH D Fachhochschule Düsseldorf Seite 6 Informatik für Ingenieure WS 2012/13 FB 5 Fachbereich Medien JFC (Java Foundation Classes) Überblick der Komponenten Swing AWT Komponenten (Frame, Button, etc.) Java 2D Drag & Drop Accessibility Bedeutung der Komponenten AWT : GUI Komponenten, Basis für Swing Komponenten Swing : GUI Komponenten & Pluggable Look & Feel* Support Java 2D : Darstellung & Modifikation 2-dimensionaler Objekte Accessibility : Unterstützungstechnologien für Menschen mit Behinderung Drag & Drop : Datentransfer zwischen Java-Programmen u. nativen Programmen * Pluggable Look & Feel = Umschalten des Look & Feel während der Laufzeit ohne Restart der Applikation FH D Fachhochschule Düsseldorf Seite 7 Informatik für Ingenieure WS 2012/13 FB 5 Fachbereich Medien AWT AWT (Abstract Windowing Toolkit) Java-Paket für die Implementierung grafischer Benutzeroberflächen Standard-API zur Implementierung einer plattform-abhängigen GUI – API = Application Programming Interface, Programmierschnittstelle AWT ist Bestandteil und teilweise Basis der Java Foundation Classes (JFC) Heavyweight-Framework Verwendung nativer GUI-Komponenten des jeweiligen Betriebssystems – – AWT Komponenten haben Partner (engl. "Peers") in der nativen GUI Peers binden z.T. umfangreiche Betriebssystem-Ressourcen heavyweight AWT bildet den kleinsten gemeinsamen Nenner aller Plattformen – Komponenten werden von allen Plattformen unterstützt (Microsoft Windows, Linux) Look & Feel Identisch mit den für das Betriebssystem direkt entwickelten Anwendungen AWT ist der Baukasten für eine plattform-abhängig GUI. FH D Fachhochschule Düsseldorf Seite 8 Informatik für Ingenieure WS 2012/13 FB 5 Fachbereich Medien Swing Swing Java-Paket für die Implementierung komplexer Benutzer-Schnittstellen (GUIs) Umfangreiche und leistungsstarke Sammlung von grafischen Komponenten Lightweight Framework Komponenten sind fast vollständig in Java implementiert – – Komponenten werden komplett gezeichnet Keine "Peers" in der nativen GUI des Betriebssystems Lightweight Nur wenige Komponenten basieren auf AWT-Komponenten – – – Leichtgewichtige Komponenten können nicht für sich alleine gezeichnet werden Sie enden letztlich immer in einer schwergewichtigen Komponente (z.B. JFrame) JFrame = Fenster ohne Rahmen; schwergewichtig, obwohl aus dem Swing-Paket Look & Feel Verschiedene Erscheinungsbilder, Umschaltung zur Laufzeit möglich Swing ist der Baukasten für eine plattform-unabhängig GUI. FH D Fachhochschule Düsseldorf Seite 9 Informatik für Ingenieure WS 2012/13 FB 5 Fachbereich Medien Übersicht Einführung AWT AWT-Paket Container Komponenten Layout-Manager Event-Handling Ausblick FH D Fachhochschule Düsseldorf Seite 10 Informatik für Ingenieure WS 2012/13 FB 5 Fachbereich Medien AWT Paket Aufbau einer GUI mit dem Abstract Windowing Toolkit (AWT) In Java hat die Gestaltung eines Programms mit GUI 3 Aspekte Erzeugen der grafischen Elemente Anordnen der grafischen Elemente mittels eines Layout-Managers Reagieren auf Ereignisse, ausgesendet von den Komponenten In dieser Vorlesung werden folgende Elemente einer GUI vorgestellt Fenster (Frame), Menü sowie Button und Checkbox Warum orientiert sich diese Vorlesung am AWT und nicht an Swing? Das AWT ist einfacher zu erlernen und auch die AWTKlassenhierarchie ist übersichtlicher! FH D Fachhochschule Düsseldorf Seite 11 Informatik für Ingenieure WS 2012/13 FB 5 Fachbereich Medien AWT Paket AWT ist ein Java-Paket Zusammenfassung logisch zusammengehörender Klassen AWT-Komponenten finden sich im Paket java.awt sowie den Unterpaketen Enthält alle Grundklassen zur Erstellung einer GUI mittels Java AWT-Paket einbinden Einbindung im Programm mit: import java.awt.* Mit dem * werden alle Klassen des Pakets eingebunden In dieser Vorlesung verwendete Klassen java.awt.Frame java.awt.FlowLayout java.awt.Button java.awt.Checkbox java.awt.event.* FH D Fachhochschule Düsseldorf : Fenster : Layout-Manager : Schaltfläche : Auswahlbox : Ereignis-Steuerung Seite 12 Informatik für Ingenieure WS 2012/13 FB 5 Fachbereich Medien AWT Paket Dokumentation Oracle (SUN): www.oracle.com – – Am rechten Seitenrand Auswahlfeld Oracle Technology Network öffnen Link folgen: Java Developers Java SE Documentation APIs Core API FH D Fachhochschule Düsseldorf Seite 13 Informatik für Ingenieure WS 2012/13 FB 5 Fachbereich Medien Klassen des AWT-Pakets Component Fenster-Teilfläche, kein selbständiges Fenster Basisklasse für alle GUI-Komponenten Container Component Container CheckBox Zusammenfassung mehrerer Komponenten Window Button Window Top-Level-Window (eigenständiges Fenster) Fenster ohne Rahmen, Titelleiste und Menü Fenstersteuerung obliegt der Anwendung Frame Choice Frame : TextField AWT Klassen (Auszug) Top-Level-Window (eigenständiges Fenster) Fenster mit Rahmen und Titel sowie Option zum Einbinden einer Menüleiste Checkbox, Button, Choice Auswahlboxen, Schaltflächen, Texteingabefelder (ein- oder mehrzeilig), etc. FH D Fachhochschule Düsseldorf Seite 14 Informatik für Ingenieure WS 2012/13 FB 5 Fachbereich Medien Übersicht Einführung AWT AWT-Paket Container Komponenten Layout-Manager Event-Handling Ausblick FH D Fachhochschule Düsseldorf Seite 15 Informatik für Ingenieure WS 2012/13 FB 5 Fachbereich Medien Container Container-Klassen Component 2 "Haupt-Typen" von Containern: Window und Panel 2 Arten bzw. Klassen von Window: Frame und Dialog Frame Container Window Eigenständiges Fenster mit Rahmen und Titel Buttons zum Minimieren, Wiederherstellen, etc. Panel Frame Titelleiste Schließen Wiederherstellen Minimieren FH D Fachhochschule Düsseldorf Seite 16 Informatik für Ingenieure WS 2012/13 FB 5 Fachbereich Medien Container: Frame Klasse Frame Einfaches Fenster mit Standard-Elementen Alle Fenster sind eine Sub-Klasse von Frame Component Container Window Panel Frame meinFenster Geerbte Methoden (Auszug) Methode Beschreibung void setTitle(String title) Titel des Fensters setzen void setVisible(boolean b) Anzeigen (b=true) oder Verstecken (b=false) des Fensters void setSize(int width, int height) Größe des Fensters einstellen FH D Fachhochschule Düsseldorf Seite 17 Informatik für Ingenieure WS 2012/13 FB 5 Fachbereich Medien Container: Frame Beispiel Einfaches Fenster mit Standard-Elementen import java.awt.Frame; public class meinFenster extends Frame { // Anweisungen } public class Test { public static void main( String args[] ) { meinFenster mF = new meinFenster(); mF.setTitle("Mein Fenster..."); // Titel eintragen mF.setSize (300,200); // Größe des Fensters einstellen mF.setVisible (true); // Fenster anzeigen } } Hinweis: Fenster kann im Moment nur über den Task-Manager geschlossen werden FH D Fachhochschule Düsseldorf Seite 18 Informatik für Ingenieure WS 2012/13 FB 5 Fachbereich Medien Übersicht Einführung AWT AWT-Paket Container Komponenten Layout-Manager Event-Handling Ausblick FH D Fachhochschule Düsseldorf Seite 19 Informatik für Ingenieure WS 2012/13 FB 5 Fachbereich Medien Menü Basisklasse eines Menüs Basisklasse für alle Komponenten ist MenuComponent MenuComponent Sub-Klassen MenuItem - Menü-Eintrag, z.B. "Speichern" Menu - Menü/Untermenü, z.B. "Datei" MenuBar - Menü-Bar, Leiste mit mehreren Menüs MenuItem MenuBar Menu Menü erstellen Instantiieren von Objekten aus den o.a. Sub-Klassen FH D Fachhochschule Düsseldorf Seite 20 Informatik für Ingenieure WS 2012/13 FB 5 Fachbereich Medien Menü Menüeintrag erzeugen Menü-Eintrag ist ein Objekt der Klasse MenuItem Bezeichnung des Eintrags erfolgt über den Konstruktor Beispiel: MenuItem mNeu = new MenuItem("Neu") Menü und Menü-Leiste erzeugen Menü ist eine Objekt der Klasse Menu Beispiel: Menu mDatei = new Menu("Datei") Menübar ist eine Objekt der Klasse MenuBar Beispiel: MenuBar mMeLeiste = new MenuBar() FH D Fachhochschule Düsseldorf Seite 21 Informatik für Ingenieure WS 2012/13 FB 5 Fachbereich Medien Menü Zusammenfügen der Menü-Elemente Menu und MenuBar verfügen über add() - Methoden Integration der Elemente durch Aufruf der o.a. Methoden Einfügen eines Menü-Eintrags in das Menü Klasse MenuItem stellt Methode add() zur Verfügung Einfügen erfolgt über den Aufruf der o.a. Methode Übergabe-Parameter ist der einzelne Menü-Eintrag Beispiel: mDatei.add(mNeu) + = Einfügen eines Menüs in die Menü-Leiste Klasse MenuBar stellt Methode add() zur Verfügung Einfügen erfolgt über den Aufruf der o.a. Methode Übergabe-Parameter ist das komplette Menü Beispiel: mMeLeiste.add(mDatei) FH D Fachhochschule Düsseldorf Seite 22 Informatik für Ingenieure WS 2012/13 = + = FB 5 Fachbereich Medien Menü Einfügen des Menüs in den Container Klasse Frame hält hiefür die Methode setMenuBar() bereit Beispiel: setMenuBar(meineMeLeiste) setMenuBar(meineMeLeiste) FH D Fachhochschule Düsseldorf Seite 23 Informatik für Ingenieure WS 2012/13 FB 5 Fachbereich Medien Menü Beispiel Erstellung eines Standard-Fensters inklusive Menü in der Zusammenfassung import java.awt.*; public class meinFenster extends Frame { meinFenster() { MenuItem mNeu = new MenuItem("Neu"); Menu mDatei = new Menu("Datei"); MenuBar mMeLeiste = new MenuBar(); mDatei.add(mNeu); mMeLeiste.add(mDatei); setMenuBar(mMeLeiste); } } FH D Fachhochschule Düsseldorf public class Test { public static void main( String args[] ) { meinFenster mF = new meinFenster(); mF.setTitle("Mein Fenster..."); mF.setSize (300,200); mF.setVisible (true); } } Seite 24 Informatik für Ingenieure WS 2012/13 FB 5 Fachbereich Medien Button Button Komponente, die bei Anklicken eine bestimmte Aktion auslösen soll Buttons sind Objekte der Klasse Button (import java.awt.Button) Konstruktoren, Methoden siehe Dokumentation von Sun, bzw. Oracle Beispiel import java.awt.Frame; import java.awt.Button; public class meinFenster extends Frame { meinFenster() { Button but_j = new Button("Ja"); Button but_n = new Button("Nein"); add(but_j); add(but_n); Hinweis: Prinzipielle Darstellung; Ergebnis wie oben erst nach Einbindung des Layout-Managers. } } FH D Fachhochschule Düsseldorf Seite 25 Informatik für Ingenieure WS 2012/13 FB 5 Fachbereich Medien Checkbox Checkbox Komponente, die entweder ein (angeklickt) oder aus (nicht angeklickt) sein kann Checkboxen sind Objekte der Klasse Checkbox (import java.awt.Checkbox) Konstruktoren, Methoden siehe Dokumentation von Sun, bzw. Oracle Beispiel import java.awt.Frame; import java.awt.Checkbox; public class meinFenster extends Frame { meinFenster() { Checkbox cb_zu = new Checkbox(); Checkbox cb_mi = new Checkbox(); cb_zu.setLabel("Mit Zucker"); cb_mi.setLabel("Mit Milch"); add(cb_zu); add(cb_mi); } } FH D Fachhochschule Düsseldorf Seite 26 Informatik für Ingenieure WS 2012/13 Hinweis: Prinzipielle Darstellung; Ergebnis wie oben erst nach Einbindung des Layout-Managers. FB 5 Fachbereich Medien Übersicht Einführung AWT AWT-Paket Container Komponenten Layout-Manager Event-Handling Ausblick FH D Fachhochschule Düsseldorf Seite 27 Informatik für Ingenieure WS 2012/13 FB 5 Fachbereich Medien Layout-Manager Layout-Manager Verantwortlich für die Anordnung der Komponenten in einem Container Manuelle Anordnung der Komponenten Null-Layout-Manager, pixelgenaue Anordnung mittels Koordinaten Erweiterungen verbunden mit Neuausrichtung bestehender Komponenten Keine Anpassung der Komponente bei Veränderungen der Container-Größe Automatische Anordnung der Komponenten Qualitative Angaben zur Lage der Komponente – – Komponente soll links zu einer anderen stehen Komponente sollen untereinander stehen Automatische Anpassung der Komponenten bei neuer Container-Größe Schachtelung Umfangreiche Layouts durch Schachtelung der LayoutManager möglich FH D Fachhochschule Düsseldorf Seite 28 Informatik für Ingenieure WS 2012/13 FB 5 Fachbereich Medien Layout-Manager FlowLayout Anordnung nebeneinander in einer Zeile Ggf. automatischer Umbruch in Folgezeile Beispiel: Icon-Leiste bei Word, Excel, etc. BorderLayout 5 Komponenten für die Platzierung – – North, South, West, East und Center BorderLayout ist Default Manger Beispiel: Textfeld und Button-Leiste GridLayout Anordnung in einem rechteckigen Gitter – – Alle Gitterzellen sind gleich groß Pro Komponente genau eine Gitterzelle Zeilen- und Spaltenzahl konfigurierbar FH D Fachhochschule Düsseldorf Seite 29 Informatik für Ingenieure WS 2012/13 FB 5 Fachbereich Medien Layout-Manager Beispiel GridLayout mit 2 Zeilen und 2 Spalten – – – Klasse Label Feld mit Text Klasse TextField Texteingabefeld Klasse Button Button zum Anklicken Aufbau des Fensters u.Anordnung der einzelnen Elemente erfolgt im Konstruktor import java.awt.*; public class meinFenster extends Frame { meinFenster() { GridLayout gl = new GridLayout(2,2); setLayout(gl); setTitle("Übersetzung"); add(new Label("Worteingabe:")); add(new TextField()); add(new Button("Deutsch -> Englisch")); add(new Button("Englisch -> Deutsch")); } } FH D Fachhochschule Düsseldorf Seite 30 Informatik für Ingenieure WS 2012/13 Anzahl Zeilen Anzahl Spalten FB 5 Fachbereich Medien Übersicht Einführung AWT AWT-Paket Container Komponenten Layout-Manager Event-Handling Ausblick FH D Fachhochschule Düsseldorf Seite 31 Informatik für Ingenieure WS 2012/13 FB 5 Fachbereich Medien Ereignisse Entstehung von Ereignissen Ereignisse entstehen bei Interaktion des Anwenders mit dem Programm Beispiele hierfür: Button drücken, Fenster schließen oder Maus bewegen Verarbeitung von Ereignissen Betriebssystem nimmt die Ereignisse auf und formt hieraus Nachrichten Versenden der Nachrichten an alle Objekte mit "angemeldetem Interesse" Programm Taste gedrückt Mausbewegung Maustaste gedrückt Texteingabe Ereignis Rollbalken betätigen Fenster minimieren etc. FH D Fachhochschule Düsseldorf Seite 32 Informatik für Ingenieure WS 2012/13 FB 5 Fachbereich Medien Event-Modell Quelle und Empfänger Ereignisbehandlung besteht aus Ereignis-Quelle und Ereignis-Empfänger Quellen sind die GUI-Komponenten, Empfänger die so genannten Listener Ereignis-Behandlung Interessierte Objekte melden Interesse an Ereignis-Quelle an (Registrierung) Ereignis-Quelle informiert angemeldete Objekte über Eintreten des Events Objekt A Ereignis-Quelle Registrierung für Benachrichtigung über einen bestimmten Event das Eintreten des Events Objekt B Ereignis-Empfänger Bearbeitung des Events (Event-Listener) FH D Fachhochschule Düsseldorf Seite 33 Informatik für Ingenieure WS 2012/13 FB 5 Fachbereich Medien Event-Modell implementieren (Schritt 1 von 2) Event-Listener erstellen (1a) Event-Listener ist die Klasse, die das Listener-Interface implementiert – – Interface ist vergleichbar mit einem Aufkleber "Ich verfüge über bestimmte Methoden" Bezogen auf einen Listener: "… Methode für die Bearbeitung des jeweiligen Events" Teilweise definiert ein Interface gleich mehrere Methoden (bzw. Events) – – – MouseListener beispielsweise definiert alle statischen Ereignisse einer Maus Drücken der Maus, Loslassen, etc.; jedes Ereignis entspricht einer Methode Grundsätzlich sind alle Methoden, die ein Interface beschreibt, zu implementieren Event-Handler einfügen (1b) Event-Handler sind die Methoden, die letztendlich die Events bearbeiten (s.o.) Listener-Interface (s.o.) gibt an, welche Methoden zu implementieren sind Jedes Ereignis, bzw. jede Gruppe von Ereignissen, hat ihren eigenen Listener! (Interface und Methoden) FH D Fachhochschule Düsseldorf Seite 34 Informatik für Ingenieure WS 2012/13 FB 5 Fachbereich Medien Event-Modell implementieren (Schritt 2 von 2) Event-Source bestimmen (2a) Welches ist das Objekt, das das Ereignis liefern soll? Bei diesem Objekt ist der Event-Listener zu registrieren! Event-Listener registrieren (2b) Registrierung erfolgt durch Aufruf der Methode add<x>Listener() – – Botschaft wird an das Objekt gesendet, das das Ereignis liefern soll Voraussetzung: "Eigene Klasse" wurde von der Klasse Component abgeleitet Registriert wird das Objekt, das das Ereignis bearbeitet (siehe Schritt 1) Jedes Ereignis, bzw. jede Gruppe von Ereignissen, hat ihre eigene Registrierungs-Methode! FH D Fachhochschule Düsseldorf Seite 35 Informatik für Ingenieure WS 2012/13 FB 5 Fachbereich Medien Event-Paket Java-Paket "java.awt.event" Beinhaltet alle Listener-Interfaces und Klassen; Paket ist zu importieren Listener bzw. Klassen "in Orange" werden nachfolgend vorgestellt Interfaces (Auszug) Event Listener Klassen (Auszug) Action Listener Component Event Window Listener Input Event … Mouse Listener AWT Event Key Event Window Event Action Event Container Event Mouse Event Quelle: http://download.oracle.com/javase/6/docs/api/java/awt/event/package-summary.html FH D Fachhochschule Düsseldorf Seite 36 Informatik für Ingenieure WS 2012/13 FB 5 Fachbereich Medien Aktions-Ereignis Aktions-Ereignis Aktions-Ereignisse entstehen beispielsweise bei Klick auf einen Button Auch der Klick auf einen Menü-Eintrag erzeugt ein Aktions-Ereignis Interface und Methoden im Überblick Event-Typ Aktions-Ereignis (Button, Menüs) Listener-Interface ActionListener Listener-Methoden actionPerformed (ActionEvent e) Objekt ActionEvent Objekt ActionEvent enthält die Beschriftung des Buttons bzw. des Menü-Eintrags Beschriftung kann ausgelesen und weiter verarbeitet werden Auslesen des Strings: z.B. String bx = e.getActionCommand() Ausgabe des Strings: z.B. System.out.println("Button = " + bx) FH D Fachhochschule Düsseldorf Seite 37 Informatik für Ingenieure WS 2012/13 FB 5 Fachbereich Medien Aktions-Ereignis Beispiel GUI mit 2 Buttons; Ausgabe der im ActionEvent übermittelten Beschriftung public class meinFenster extends Frame { meinFenster() { setLayout(new FlowLayout(FlowLayout.CENTER, 20,20)); Button but_ja = new Button("Ja"); add(but_ja); Button but_nein = new Button("Nein"); add(but_nein); ButtonBearbeitung bb = new ButtonBearbeitung(); but_ja.addActionListener(bb); but_nein.addActionListener(bb); } class ButtonBearbeitung implements ActionListener { public void actionPerformed(ActionEvent e) { String bx = e.getActionCommand(); // Command-String holen System.out.println("Button = " + bx); // String ausgeben } }} // aus Platzgruenden FH D Fachhochschule Düsseldorf Seite 38 Informatik für Ingenieure WS 2012/13 FB 5 Fachbereich Medien Maus-Ereignis Maus-Ereignis Maus-Ereignisse entstehen z.B. bei Drücken oder Loslassen der Maustaste Auch Bewegungen der Maus mit oder ohne gedrückter Maustaste sind Events Interface und Methoden im Überblick Event-Typ Listener-Interface Listener-Methoden Maus-Ereignis MouseListener mouseClicked(MouseEvent e) mouseEntered(MouseEvent e) mouseExited(MouseEvent e) mousePressed(MouseEvent e) mouseReleased(MouseEvent e) Maus-Bewegungs-Ereignis MouseMotionListener mouseDragged(MouseEvent e) mouseMoved(MouseEvent e) Objekt MouseEvent Objekt MouseEvent liefert u.a. Koordinatenwerte des Klicks relativ zum Ursprung FH D Fachhochschule Düsseldorf Seite 39 Informatik für Ingenieure WS 2012/13 FB 5 Fachbereich Medien Maus-Ereignis Beispiel Mausbewegung bei gedrückter Maustaste; Zählen und Ausgabe der Events und Besonderheit: MouseMotionListener definiert mehr als eine Methode – – Event-Listener muss alle Methoden (zwei Methoden in diesem Fall) implementieren Nicht benötigte Methode ist als leere Methode (d.h. ohne Aktivitäten) zu definieren class Klasse_B implements MouseMotionListener { int i; public void mouseMoved(MouseEvent e) { // keine Bearbeitung } // Methode ohne Bearbeitung public void mouseDragged(MouseEvent e) // Methode mit Bearbeitung { // Bearbeitung des Events System.out.print("Ereignis Nr." + (i++)); } } FH D Fachhochschule Düsseldorf Seite 40 Informatik für Ingenieure WS 2012/13 FB 5 Fachbereich Medien Fenster-Ereignis Fenster-Ereignis Fenster-Ereignisse entstehen bei Zustandsänderungen des Fensters Zustandsänderungen entstehen u.a. beim Ikonisieren oder Schließen Interface und Methoden im Überblick Event-Typ Fenster-Ereignis Listener-Interface WindowListener Listener-Methoden windowActivated(WindowEvent e) windowClosed(WindowEvent e) windowClosing(WindowEvent e) windowDeactivated(WindowEvent e) windowDeiconified(WindowEvent e) windowGainedFocus(WindowEvent e) windowIconified(WindowEvent e) windowLostFocus(WindowEvent e) windowOpened(WindowEvent e) windowStateChanged(WindowEvent e) Objekt WindowEvent Objekt WindowEvent enthält weitere ("eher unbedeutende") Infos zum Event FH D Fachhochschule Düsseldorf Seite 41 Informatik für Ingenieure WS 2012/13 FB 5 Fachbereich Medien Fenster-Ereignis WindowListener WindowListener hat insgesamt 7 Methoden (Java 1.4: 10 Methoden) WindowListener Klasse muss alle 7 bzw. 10 Methoden implementieren WindowAdapter-Klasse Bei Fokussierung auf einen Event bleiben die restlichen Methoden leer Aufwand für eine vollständige Implementierung recht hoch Adapter-Klasse definiert alle Methoden als so genannte leere Methoden – – Event-Listener muss nicht zwingend das Interface implementieren Event-Listener kann statt dessen auch von der Adapter-Klasse abgeleitet werden Vorteil: Lediglich die benötigte Methode muss definiert (überschrieben) werden FH D Fachhochschule Düsseldorf Seite 42 Informatik für Ingenieure WS 2012/13 FB 5 Fachbereich Medien Fenster-Ereignis Beispiel Klick auf den Schließ-Button eines Fensters; Schließen des Fensters import java.awt.*; import java.awt.event.*; class meinFenster extends Frame { meinFenster() { FensterBehandlung wB = new FensterBehandlung(); this.addWindowListener(wB); } class FensterBehandlung extends WindowAdapter { public void windowClosing(WindowEvent e) { System.exit(0); System.out.println("Fenster wird geschlossen..."); } } } FH D Fachhochschule Düsseldorf Seite 43 Informatik für Ingenieure WS 2012/13 FB 5 Fachbereich Medien Übersicht Einführung AWT AWT-Paket Container Komponenten Layout-Manager Event-Handling Ausblick FH D Fachhochschule Düsseldorf Seite 44 Informatik für Ingenieure WS 2012/13 FB 5 Fachbereich Medien Ausblick Grafische Benutzeroberfläche mit Swing FH D Fachhochschule Düsseldorf Seite 45 Informatik für Ingenieure WS 2012/13 FB 5 Fachbereich Medien Das war's - für dieses Jahr… Ich wünsche Ihnen ein schönes und besinnliches Weihnachtsfest. *** Genießen Sie die vorlesungsfreie Zeit und kommen Sie gut ins neue Jahr 2013! *** Wir sehen uns wieder am 07. Jan 2013 (P) 09. Jan 2013 (VL/P) © achim rosenthal - Fotolia.com © Alexey Bannykh - Fotolia.com FH D Fachhochschule Düsseldorf Seite 46 Informatik für Ingenieure WS 2012/13 FB 5 Fachbereich Medien