Vorlesung Informatik II



Ähnliche Dokumente
Objektorientierte Software-Entwicklung

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 7. Grafische Benutzeroberflächen

Graphische Benutzungsoberflächen

Objektorientierte Programmierung

GUI Programmierung mit JAVA Swing

GRAFISCHE BENUTZERSCHNITTSTELLEN

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI

Zentrale Objekte zur Programmierung graphischer Benutzeroberflächen (GUI)

Hochschule der Medien Prof. Uwe Schulz 14. Juli 2010 Klausur Informatik, EDV-Nr Seite 1 von 5. Teil 2: Aufgaben

Ziel dieses Kapitels: Einführung in die Grundzüge der Programmierung graphischer Benutzeroberflächen (engl.: "graphical user interface", GUI) in Java

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 7. Grafische Benutzeroberflächen 1

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Grundlagen der Programmierung APPLETS

Übersicht. 1 Vorbemerkungen zu Sequenzdiagrammen. 2 Sequenzdiagramm aus Code ableiten. 3 Sequenzdiagramm konstruieren und in Java implementieren

GUI Programmierung in Java

Swing Lernen am Code Teil 1

Eventhandling. Delegation model Eventhandler model

JButton, JCheckBox, JRadioButton. Programmieren II. Vorlesung 7. Handout S. 1. Dr. Klaus Höppner. Hochschule Darmstadt Sommersemester 2009.

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken.

tentoinfinity Apps 1.0 EINFÜHRUNG

NTB Druckdatum:

Grafische Benutzeroberfläche mit Glade und Python

Java: Vererbung. Teil 3: super()

Fakultät Angewandte Informatik Programmierung verteilter Systeme Übungen zur Vorlesung Informatik II, Blatt 6

I. Grundlagen II. Ereignistypen III. Ereignisempfänger. Event-Handling (EH)

Java I Vorlesung 11 Graphische Oberflächen mit Swing

Das Model View Controller (MVC) Konzept

Applets. Applets. Applets. Applet: Java-Programm Eingebettet in einer HTML-Seite Ausführung von einem Java-fähigen Web-Browser oder sog.

Tutorial04: Swing: Erstellen eines JFrames mit einem JSplitPane

Ein Manager mit CardLayout layout/cards.java

Bedienungsanleitung. Matthias Haasler. Version 0.4. für die Arbeit mit der Gemeinde-Homepage der Paulus-Kirchengemeinde Tempelhof

Pascal-Compiler für den Attiny

Java Projekt: Tic Tac Toe + GUI

Um sich zu registrieren, öffnen Sie die Internetseite und wählen Sie dort rechts oben

Eigene Seiten erstellen

Kurzeinführung Excel2App. Version 1.0.0

Institut für Programmierung und Reaktive Systeme. GUIs mit Swing. Markus Reschke

Web2Lead. Konfiguration

Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress.

Grafische Benutzeroberflächen mit Swing

Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten

Java Lab 2006/12/13 Client

Bedienung von BlueJ. Klassenanzeige

Ihr CMS für die eigene Facebook Page - 1

Outlook Erstellen einer aus einer HTML - Vorlage INHALT

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Mailchimp Handbuch für Daylite 4

KURZANLEITUNG CLOUD OBJECT STORAGE

Software Engineering Klassendiagramme Assoziationen

Anleitung zur Erstellung und Bearbeitung von Seiten in Typo3. Typo3. Anleitung. Wenpas Informatik

Argelander Institut für Astronomie. Persönliche Website

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 17: 3-Schichten-Architektur 2

Faktura. IT.S FAIR Faktura. Handbuch. Dauner Str.12, D Mönchengladbach, Hotline: 0900/ (1,30 /Min)

Klausur vom 14. Juni Informatik 4

J.1. J.1 GUI-Programmierung in in Java Prof. Dr. Rainer Manthey Informatik II 1

eduvote Ein Umfragesystem für Lehrveranstaltungen - PowerPoint Add-In -

Fachdidaktik der Informatik Jörg Depner, Kathrin Gaißer

Eltako-FVS. Lizenzaktivierung ohne Internetverbindung

Seriendruck mit der Codex-Software

Newsletter. 1 Erzbistum Köln Newsletter

Quartalsabrechnung! " " " " " " " Stufe 1! Beheben von Abrechnungsfehlern" Stufe 2! Neue Abrechnung erstellen"

Loggen Sie sich in Ihrem teamspace Team ein, wechseln Sie bitte zur Verwaltung und klicken Sie dort auf den Punkt Synchronisation.

Auswertung erstellen: Liste mit -

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

Excel Pivot-Tabellen 2010 effektiv

IDEP / KN8 für WINDOWS. Schnellstart

KURZANLEITUNG MSDAS DMS SYSTEM - SILVERDAT II SCHNITTSTELLE

Umstellung auf das Mobile-TAN-Verfahren in der VR-NetWorld Software

Arbeitsschritte EAÜ Leistungserbringer Einnahmen erfassen

Delegatesund Ereignisse

Objektorientierte Programmierung

Whitepaper. Produkt: combit Relationship Manager / address manager. Dateiabgleich im Netzwerk über Offlinedateien

Erste Schritte. Lavid-F.I.S. Faktura. Erste Schritte

Das Interface ÁØ ÑÄ Ø Ò Ö verlangt die Implementierung

Kapitel 10. Event Handling 10.1 MVC

Übersicht... 2 Dateiupload... 3 Administratorfunktionen... 4

Urlaubsregel in David

Seriendruck mit der Codex-Software

Transkript:

Vorlesung Informatik II Universität Augsburg Wintersemester 2011/2012 Prof. Dr. Bernhard Bauer Folien von: Prof. Dr. Robert Lorenz Lehrprofessur für Informatik 07. Java: GUI und Ereignisbehandlung Teil 1 1

Inhalt In Java gibt es mehrere Klassenbibliothek-Pakete, die Datenstrukturen und Operationen für die grafische Darstellung von Fenstern und Benutzerinteraktionen erlauben (wie Sie es gewohnt sind) In diesem Kapitel werden wir besprechen: Grundlagen des Pakets java.awt Einfach(st)e Anbindung von Fenstern an Datenklassen Später: Grafische Benutzerschnittstelle und Schichtenarchitektur Paket java.swing 2

Exkurs: GUI-Elemente Grundbegriffe Dialog Fenster zur Interaktion mit dem Benutzer Primärdialog: zur direkten Aufgabenerfüllung z.b. Editor Sekundärdialog: für situationsabhängige zusätzliche Informationen wird aus Primärdialog gestartet nach Beendigung wird Primärdialog fortgesetzt z.b. Drucken, Speichern unter, Formeln einfügen, Suchen... 3

Exkurs: GUI-Elemente Grundbegriffe Dialog Fenster zur Interaktion mit dem Benutzer modaler Dialog muss beendet werden vor Aktivierung eines anderen Fensters z.b. Speichern unter, Mitteilungen nicht modaler Dialog kann unterbrochen werden z.b. Suchen 4

Inhalt Später: Vorgehen zum systematischen Konstruieren der GUI zu vorgegebenen Datenklassen (Erfassungsfenster, Listenfenster, Dialogführung) Jetzt: Vereinfachte Anbindung von Fensterklassen an Datenklassen Zugriff auf Daten von Objekten einer Klasse Zugriff auf Beziehungen zwischen Objekten 5

Ein leeres Fenster (Klasse Frame) import java.awt.*;//import aller Klassen des Pakets public class Test { public static void main (String args[]){ Frame F=new Frame(); F.setSize(300,300);//Breite und Höhe in Pixeln F.setVisible(true);//sichtbar machen } } 6

Besser: Entkoppelung der Programmklasse + eigene Fensterklasse als Spezialisierung + Frame + MeinProgrammGUI Benutze Konstruktor zur Darstellung des Fensters 7

Besser: Entkoppelung der Programmklasse + eigene Fensterklasse als Spezialisierung public class MeinProgrammGUI extends Frame { public MeinProgrammGUI (){ super();//konstruktoraufruf von Frame (opional) setsize(300,300); setvisible(true); } } public class meinprogramm { public static void main (String args[]){ new MeinProgrammGUI();//Anonymes Objekt erzeugen } } 8

- Vererbungshierarchie Object Component (Graphische Benutzerschnittstelle) Container (kann andere Komponenten enthalten) Panel (für Fensterkomponenten) Window (Primärfenster ohne Rand) Dialog (für Dialoge) Frame (mit Rand und Titel) 9

Ausgewählte Klassen und Operationen: Frame: Fenster mit Titel void setmenubar(menubar b): Menubar b hinzufügen MenuBar: Leiste, um Menüs aufzunehmen Menu add(menu m): Menu hinzufügen Menu: Menü mit Titel, das verschiedene Menüpunkte enthalten kann MenuItem add(menuitem i): Menüpunkt hinzufügen MenuItem: Menüpunkt mit Titel, um Aktionen auszuführen oder Optionen zu setzen oder andere Menüs aufzunehmen (zum Ausklappen) 10

Ausgewählte Klassen und Operationen: Frame void setlayout(layoutmanager l): Komponenten durch Layout Component add(...): Komponenten gemäß Layout hinzufügen LayoutManager: Schnittstelle zur Festlegung der Darstellung von BorderLayout: siehe nächste Folie FlowLayout: von links nach rechts (horizontal) fließend Gridlayout: wie Gitter/Tabelle Label: Komponente zur Darstellung von Text 11

BorderLayout: North West Center East South 12

Ausgewählte Klassen und Operationen: Panel: Komponente zur Aufnahme weiterer Komponenten nach Layout Voreinstellung: FlowLayout Component add(...): Komponenten gemäß Layout hinzufügen Button: Schaltfläche mit Titel, um Aktionen auszuführen PopupMenu: über Rechtsmausklick erreichbares Menu wird einer Komponente zugeordnet 13

Ausgewählte Klassen und Operationen: Frame void setlocation(int x, int y): Linke obere Ecke des Frames void setvisible(true): Frame sichtbar machen void pack(): Optimale Größe zur Darstellung aller Komponenten setzen Dialog: Fenster mit Titel zur Darstellung von Dialogen zu einem Frame oder zu einem anderen Dialog modal oder nicht modal Operationen ähnlich wie bei Frame 14

Ausgewählte Klassen und Operationen: TextField: Zur Eingabe von Text (einzeilig) String gettext(): Eingegebenen Text auslesen void settext(string text): Text setzen Choice: Ausklappbare Liste von Strings zur Auswahl unter verschiedenen Unterpunkten (Einfach- oder Mehrfachauswahl) void add(string titel): Unterpunkt hinzufügen void select(string titel): Unterpunkt auswählen String getselecteditem(): Ausgewählten Unterpunkt zurückgeben 15

Ausgewählte Klassen und Operationen: TextArea: Zur Eingabe von Text (mehrzeilig, mit Scrollbar) ähnlich zu TextField List: Liste von Strings zur Auswahl unter verschiedenen Unterpunkten (ähnlich zu Choice) void dd(string text): Unterpunkt hinzufügen void remove(string text): Unterpunkt entfernen void removeall(): alle Unterpunkte entfernenntfernen 16

Anwendungsfenster Sinnvolle Komponenten: Button close: Schließen des Fensters Menu bearbeiten: Öffnen von Dialogen zur Bearbeitung von Daten PopupMenu bearbeitenpm: dasselbe als Popupmenu Komponenten mit Hilfe von Panels organisieren Layout hinzufügen 17

Dialogfenster (vereinfacht, exemplarisch) Anbinden von Dialogfenstern an Datenklassen zur Bearbeitung von Daten: Erstellen von Daten Anzeigen von Daten Modifizieren von Daten Löschen von Daten Binde an jede Datenklasse MeineKlasse und ihre Containerklasse ein Dialogfenster MeineKlasseGUI an 18

Dialogfenster (vereinfacht, exemplarisch) + Dialog + MeineKlasseGUI 0..* 0..* 0..1 subject + MeineKlasse container 1..1 + MeineKlasseContainer 19

Dialogfenster (vereinfacht, exemplarisch) + MeineKlasseGUI + MeineKlasseGUI()... + save() + update() + load() Eingegebene Daten an subject übergeben Liste aller Objekte in container neu anzeigen Objektdaten von subject laden 20

Dialogfenster (vereinfacht, exemplarisch) Mit passenden grafischen Komponenten zum Eingeben und Anzeigen aller Attributwerte: Einwertiges Attribut: TextField Aufzählungs-Attribut: Choice Mehrwertiges Attribut: List Mit grafischer Komponente zum Anzeigen und Auswählen von erzeugten Objekten: List 21

Dialogfenster (vereinfacht, exemplarisch) Benutze Konstruktor zum Initialisieren aller grafischer Komponenten Sollten grafische Komponenten Attribute der Fensterklasse sein? Nur diejenigen zur Aufnahme von Attributwerten (Textfelder,...) sonst: lokale Variablen im Konstruktor (Schaltflächen,...) 22

Dialogfenster (vereinfacht, exemplarisch) Mit Schaltflächen / Menüpunkten zum Ausführen obiger Aktionen und zugehörigen Operationen keine üblichen Verwaltungsoperationen für die Attribute und Beziehungen (überflüssig) 23

Dialogfenster (vereinfacht, exemplarisch): Attribute: Referenzattribute & Grafische Komponenten zur Aufnahme von Attributwerten public class MeinKlasseGUI extends Dialog { private MeineKlasse subject;//referenz Datenobjekt private MeineKlasseContainer container;//referenz Container private TextField meinattribut;//ausgabe Attribut Datenobjekt... private List alleobjekte;//ausgabe aller Datenobjekte... 24

Dialogfenster (vereinfacht, exemplarisch): Konstruktor: Fensteraufbau & Initialisierungen public MeinKlasseGUI(Frame f){ super(f, Objekte verwalten,false);//frame-konstruktor setlayout(new GridLayout(0,1));//eine Spalte,beliebig viele Zeilen Panel p = new Panel(); meinattribut = new TextField(20); p.add(meinattribut); Button speichern = new Button( Speichern"); p.add(speichern); add(p); container = MeineKlasseContainer.instance(); subject = null;//initialisierung der Referenzen pack(); setvisible(true); } 25

Dialogfenster (vereinfacht, exemplarisch): Operation save(): Auslesen der Werte aus den grafischen Komponenten und Erzeugen eines neuen Objekts mit diesen Werten public void save(){ subject = new MeineKlasse(...); subject.setmeinattribut(meinattribut.gettext());... } 26

Dialogfenster (vereinfacht, exemplarisch): Operation update(): Löschen aller dargestellten Listenelemente und neu Laden aus dem Container public void update(){ alleobjekte.removeall(); for(meineklasse o:container){ alleobjekte.add(o.tostring()); } } 27

Dialogfenster (vereinfacht, exemplarisch): Operation load(): Laden der Werte eines aus der Liste selektierten Objekts if (alleobjekte.getselecteditem()!= null){ Iterator<MeineKlasse> it = container.iterator(); while (it.hasnext()){ MeineKlasse o = it.next(); String auswahl = alleobjekte.getselecteditem(); if (o.tostring().equals(auswahl)){ subject = o;} }... meinattribut.settext(subject.getmeinattribut());... 28

Ereignisbehandlung Noch können wir nichts mit dem Fenster anfangen Es lässt sich nicht schließen Dialogfenster lassen sich nicht öffnen Keine Reaktion auf Drücken von Schaltflächen Es fehlt noch die sogenannte Ereignisbehandlung 29

Ereignisbehandlung Benutzeraktionen lösen sog. Ereignisse (Events) aus: Klicken auf Schaltfläche: ActionEvent Klicken mit der Maus auf Komponenten: MouseEvent Betätigen von Keyboardtasten: KeyEvent Betätigen von Fensterfunktionen: WindowEvent Events sind Java-Objekte, die Informationen über Benutzeraktionen kapseln Die Eventklassen bilden eine Vererbungshierarchie (siehe API) 30

Ereignisbehandlung AWTEvent ActionEvent AdjustmentEvent ComponentEvent TextEvent ConzainerEvent FocusEvent InputEvent PaintEvent WindowEvent KeyEvent MouseEvent 31

Ereignisbehandlung Objekte, die auf Benutzeraktionen reagieren sollen (z.b. Fenster), müssen diese Ereignisse abhören können Man kann ereignisempfangende Objekte (Fenster) bei ereignisauslösenden Objekten (Button) als Ereignisabhörer (EventListener) registrieren EventListener ist eine Schnittstelle, die festlegt, mit welchen Operationen auf ein Ereignis regiert werden kann Für jede Ereignisart gibt es eine eigene EventListener- Schnittstelle (ActionListener, MouseListener, ) 32

Ereignisbehandlung Für die Ausführung von Benutzeraktionen zuständige Klassen (ereignisempfangende Klassen) müssen die entsprechende EventListener-Schnittstelle implementieren <<interface>> EventListener <EreignisBehandlungs Operationen> <EreignisauslösendeKlasse> addeventlistener() removeeventlistener() <EreignisEmpfangendeKlasse> <EreignisBehandlungsOperationen> EventObject getsource()... 33

Ereignisbehandlung Für die Ausführung von Benutzeraktionen zuständige Klassen (ereignisempfangende Klassen) müssen die entsprechende EventListener-Schnittstelle implementieren Ereignisauslösende Objekte benachrichtigen alle bei ihr registrierten Ereignisabhörer... durch Aufruf der zum Ereignis gehörenden Operation der Ereignisabhörer-Schnittstelle 34

Ereignisbehandlung Beispiel: ActionEvent, ActionListener (Buttons) <<interface>> ActionListener actionperformed() Button addactionlistener() removeactionlistener() MeinFenster actionperformed() ActionEvent getactioncommand()... 35

Ereignisbehandlung Beispiel: ActionEvent, ActionListener (Button close) public class meinfenster extends Frame implements ActionListener{ public meinfenster(){... Button close = new Button( close ); add(close); close.addactionlistener(this);//fenster bei Button anmelden... } public void actionperformed(actionevent e){ if (e.getactioncommand().equals("close")){ dispose();//fenster schließen System.exit(0);//Anwendungsresourcen freigeben } } } 36

Ereignisbehandlung Beispiel: WindowEvent, WindowListener (Fenster) <<interface>> WindowListener windowclosing() windowclosed() windowopened() windowactivated() MeinFenster addwindowlistener() removewindowlistener()... MeinFenster WindowEvent getwindow()... 37

Ereignisbehandlung Beispiel: WindowAdapter (mit leeren Implementierungen) WindowAdapter windowclosing() windowclosed() windowopened() windowactivated() <<interface>> WindowListener MeinFenster addwindowlistener() removewindowlistener() WindowEventHandler windowclosing() WindowEvent getwindow()... 38

Ereignisbehandlung Beispiel: WindowAdapter (mit leeren Implementierungen) public class MeinWindowEventHandler extends WindowAdapter{ MeinFenster f; MeinWindowEventHandler(MeinFenster f) { this.f = f; } public void windowclosing(windowevent e){ f.dispose(); System.exit(0); } } public class meinfenster extends Frame { public meinfenster() {... MeinWindowEventHandler w = new MeinWindowEventHandler(this); addwindowlistener(w); ) } 39

Ereignisbehandlung Beispiel: WindowAdapter (als anonymes Objekt) public class meinfenster extends Frame { public meinfenster() {... addwindowlistener(new WindowAdapter(){ public void windowclosing(windowevent e){ dispose(); System.exit(0); } }); } 40

Ereignisbehandlung Event-Klasse Interface Methoden Ereignis- Quellen ActionEvent ActionListener actionperformed() Button MenuItem TextField AdjustmentEvent AdjustementListener adjustmentvaluechanged() Scrollbar ItemEvent ItemListener itemstatechanged() Checkbox CheckboxMenuItem Choice List KeyEvent KeyListener keypressed() Component keyreleased() keytyped() 41

Ereignisbehandlung Event-Klasse Interface Methoden Ereignis- Quellen MouseEvent MouseListener mouseclicked() Component mouseentered() mouseexited() mousepressed() mousereleased() MouseMotionListener mousedragged() mousemoved() Component WindowEvent WindowListener windowactivated() Window windowclosed() windowclosing() windowdeactivated() windowdeiconified() windowiconified() windowopened() 42