70. Programmierung interaktiver Systeme mit modularen...
Transcript of 70. Programmierung interaktiver Systeme mit modularen...
![Page 1: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/1.jpg)
Softwaretechnologie (ST) © Prof. U. Aßmann
Fakultät Informatik - Institut Software- und Multimediatechnik - Softwaretechnologie
70. Programmierung interaktiver Systeme mitmodularen Controllern
Prof. Dr. rer. nat. Uwe Aßmann
Institut für Software- undMultimediatechnik
Lehrstuhl Softwaretechnologie
Fakultät für Informatik
TU Dresden
Version 16-0.2, 01.11.16
1. Einführendes Beispiel für Java-AWT-Oberfächen
2. Phase 1: Aufbau der Schichten
1. EreignisgesteuerterProgrammablauf Play-In
2. Phase 1b) Einfache In-Controller
3. Phase 1c) Hierarchischer Aufbauvon Benutzungsoberfächen mitSwing
3. Phase 2: Verdrahtung von GUI undAnwendungslogik mit MVC
4. MVC / Controller Frameworks
5. Zusammenfassung
Anhang
![Page 2: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/2.jpg)
© P
rof.
U. A
ßm
ann
2 Softwaretechnologie (ST)
Obligatorische Literatur
► [PassiveView] Martin Fowler. Passive View. http://www.martinfowler.com/eaaDev/PassiveScreen.html. Strikte Schichtung undpassiver View.
► Spring http://docs.spring.io/spring/docs/3.1.x/► Rod Johnson. J2EE development frameworks. IEEE Computer, 38(1):107-110,
2005.■ http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=1381270
![Page 3: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/3.jpg)
© P
rof.
U. A
ßm
ann
3 Softwaretechnologie (ST)
Andere Literatur
► F. Buschmann. N. Meunier, H. Rohnert, P. Sommerlad, M. Stal. Pattern-orientierteSoftware-Architektur. Addison-Wesley.
■ Entwurfsmuster und Architekturstile. MVC, Pipes, u.v.m.► [Herrmann] M. Veit, S. Herrmann. Model-View-Controller and Object Teams: A Perfect
Match of Paradigms. Aspect-Oriented System Development (AOSD) 2003, ACM Press
► Mike Potel. MVP: Model-View-Presenter The Taligent Programming Model for C++and Java. VP & CTO Taligent, Inc.
■ ftp://www6.software.ibm.com/software/developer/library/mvp.pdf
► html web frameworks■ STRUTS http://exadel.com/tutorial/struts/5.2/guess/strutsintro.html■ Web Application Component Toolkit
http://www.phpwact.org/pattern/model_view_controller
![Page 4: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/4.jpg)
Softwaretechnologie (ST) © Prof. U. Aßmann
Fakultät Informatik - Institut Software- und Multimediatechnik - Softwaretechnologie
70.1 Einfache Kopplung über Play-In undPlay-Out mit Java-AWT
► Nur Modell und Sicht, kein Controller
![Page 5: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/5.jpg)
© P
rof.
U. A
ßm
ann
5 Softwaretechnologie (ST)
Vereinfachte Schichtenarchitektur (zunächst ohneController)
Graphische Benutzungsoberfläche(Fensteroberfläche mit
Widget-Hierarchie,graphical user interface, GUI)
Window
Button
Menu
Fachliches Modell(Anwendungslogik)
Unsichtbare Ablauf-
Steuerung(Ereignis-
Verwaltung)
Play-In(asynchron,push)
Play-out(synchron, abermultiple Sichtenund pull-Steuerung)
Teambesprechung
Teammitglied
![Page 6: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/6.jpg)
© P
rof.
U. A
ßm
ann
6 Softwaretechnologie (ST)
Sichten: Zähler als motivierendes Beispiel
c: A_Counter
ctr = 7
A_Counter
+ count()+ reset()
+ getValue()
– ctr
Anwendungslogik (Fachl. Modell)
cf: CounterFrame
Sicht 1 Sicht 2
![Page 7: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/7.jpg)
© P
rof.
U. A
ßm
ann
7 Softwaretechnologie (ST)
Daten-Modell und Sicht (ohne Controller)
Methodenaufrufe=> Änderungen(play-in)
Beispiele: Verschiedene Dokumentenansichten, Statusanzeigen, Verfügbarkeit von Menüpunkten
Frage: Wie hält man das Modell in der Anwendungslogikunabhängig von den beliebig vielen Sichten darauf ?
Benachrichtigungvieler Sichtenüber Änderungen(play-out, viele pull Observer)
Fachliche Klasse(Fachl. Modell)
Sicht 1(View)
Sicht 2(View)
Muster "Observer"
push-Observer=> Änderungen(play-in, asynchronausgelöst)
![Page 8: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/8.jpg)
© P
rof.
U. A
ßm
ann
8 Softwaretechnologie (ST)
v1:View
Play-In mit push-Observer; Play-Out mit push-Observer
m:DomainModel
itemChanged()update(data)
v2:View
update(data)
update(data)
Play-In
Play-Out 1
Play-Out 2
► Push-Observer werden vom JDK unterstützt
► Nachteil: Daten werden mit dem update() geschoben
► Play-In-Observer nötig, falls dynamisch viele Views registrieren
![Page 9: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/9.jpg)
© P
rof.
U. A
ßm
ann
9 Softwaretechnologie (ST)
Struktur java.util.Observer (push-Observer) für Play-Out
Observable
addObserver(Observer)deleteObserver(Observer)notifyObservers(d:Data)notifyObservers()setChanged()hasChanged()
<interface>Observerobservers
update(Observable,Data)update(Observable)
ConcreteObserver
update (Data)
ObserverState
for (b: observers) { b.update (this,d)}
do something with Data
*
► Das JDK bietet mehrere Implementierungen des Entwurfsmusters Observer an■ java.util Observer, java.awt.Window
► java.util.Observer folgt dem Muster “Subject-Passing push-Observer”
► Subjekt Observable schiebt Daten mit update(this,Data)
► Abweichung: Observable ist konkrete Klasse
![Page 10: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/10.jpg)
© P
rof.
U. A
ßm
ann
10 Softwaretechnologie (ST)
Grundversion: Hauptprogramm für Fensteranzeige
import java.awt.*;
class ExampleFrame extends Frame { // Fensteroberfläche
public ExampleFrame () { setTitle("untitled"); setSize(150, 50); setVisible(true); }
}
class GUI1 { public static void main (String[] argv) { // Phase 1: Aufbau der Fensteroberfläche
ExampleFrame f = new ExampleFrame(); // .. implizites Betreten der Reaktionsschleife: // Phase 2: reaktives Programm }}
![Page 11: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/11.jpg)
© P
rof.
U. A
ßm
ann
11 Softwaretechnologie (ST)
Play-In mit java.awt.WindowListener (push-Observer)
java.awt.Window
addWindowListener(WindowListener)removeWindowListener(WindowListener)processWindowEvent(e:WindowEvent)
listeners<interface>
java.awt.WindowListener
windowClosed (WindowEvent ev)windowOpened (WindowEvent ev)windowIconified (WindowEvent ev)windowDeiconified (WindowEvent ev)windowActivated (WindowEvent ev)windowDeactivated (WindowEvent ev)windowClosing (WindowEvent ev))
Controller Classor
Application Class
for (b: observers) { b.window<*>(this,d)}
*
► Play-in: java.awt.Window bietetzwei push-Observer an
► Subjekt schiebt Daten mitwindow<*>(WindowEvent) oderactionPerformed(WindowEvent)
java.awt.Frame (Widget)
<interface>ActionListeneractionPerformed(WindowEvent ev)
EventListener
![Page 12: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/12.jpg)
© P
rof.
U. A
ßm
ann
12 Softwaretechnologie (ST)
Registrierung für java.awt.WindowListener (Play-In)
► Im „Auslöser“ java.awt.Frame fndet sich eine Registrierungsprozedur (ererbt vonjava.awt.Window):
public class Frame ... {
public void addWindowListener(WindowListener l)
}
► java.awt.event.WindowListener ist eine Schnittstelle eines Observers, die von derAnwendungsklasse implementiert werden kann:
public interface WindowListener {
... Methoden zur Ereignisbehandlung
}
Observer
Observable (Subject)
Observing(Observer)
![Page 13: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/13.jpg)
© P
rof.
U. A
ßm
ann
13 Softwaretechnologie (ST)
Erste Verbesserung: Hauptprogramm für schließbaresFenster (play-in)
import java.awt.*;import java.awt.event.*;
class WindowCloser implements WindowListener { ... siehe später ...}
class ExampleFrame extends Frame {
public ExampleFrame () { setTitle("untitled"); setSize(150, 50); addWindowListener(new WindowCloser()); setVisible(true); }
}class GUI2 { public static void main (String[] argv) {
ExampleFrame f = new ExampleFrame(); }}
Anmelden des play-in
Subjekt starten (Ereignisverwaltung)
reagieren (Phase 2)
Listener des play-in
![Page 14: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/14.jpg)
© P
rof.
U. A
ßm
ann
14 Softwaretechnologie (ST)
Ein Zähler (Beispiel für Domänenobjekt im fachlichesAnwendungsmodell)
class A_Counter { private int ctr = 0; public void count () { ctr++;
} public void reset () { ctr = 0;
} public int getValue () { return ctr; }}
class A_Counter { private int ctr = 0; public void count () { ctr++;
} public void reset () { ctr = 0;
} public int getValue () { return ctr; }}
![Page 15: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/15.jpg)
© P
rof.
U. A
ßm
ann
15 Softwaretechnologie (ST)
// Application logicimport java.lang.util.*;class A_Counter extends Observable { private int ctr = 0; public void count () { ctr++; setChanged(); notifyObservers(); } public void reset () { ctr = 0; setChanged(); notifyObservers(); } public int getValue () { return ctr; }}
// Application logicimport java.lang.util.*;class A_Counter extends Observable { private int ctr = 0; public void count () { ctr++; setChanged(); notifyObservers(); } public void reset () { ctr = 0; setChanged(); notifyObservers(); } public int getValue () { return ctr; }}
Beobachtbares Anwendungsmodell (Play-out)
► A_Counter wird durch Sicht beobachtet, z.B. mit jdk-Implementierungsmuster java.util.Observer
► A_Counter ist Subjekt (Klasse java.util.Observable)■ bei Veränderung des A_Counter werden die Sichten mit setChanged() benachrichtigt
(play out)
class Connector { A_Counter counter; counter = new A_Counter(); view = new GraphicCounterView(); view2= new TextualCounterView(); // wire view and model (play-out) counter.addObserver(view); counter.addObserver(view2);}
class Connector { A_Counter counter; counter = new A_Counter(); view = new GraphicCounterView(); view2= new TextualCounterView(); // wire view and model (play-out) counter.addObserver(view); counter.addObserver(view2);}
![Page 16: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/16.jpg)
© P
rof.
U. A
ßm
ann
16 Softwaretechnologie (ST)
Nachteile der Architektur ohne Controller
► GUI und Aufrufe an die Anwendungslogik sind vermischt (tangled)
► Aufrufe an die Anwendungslogik sind über den GUI verstreut (scattered)
► Keine Trennung möglich
► Koordination fest zwischen GUI und Anwendungslogik eingebacken■ Kein Wechsel der Strategie der Koordination möglich■ Keine echte Asynchronität möglich
![Page 17: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/17.jpg)
Softwaretechnologie (ST) © Prof. U. Aßmann
Fakultät Informatik - Institut Software- und Multimediatechnik - Softwaretechnologie
70.2 Phase 1: Aufbau der Schichten in Swing
Anwendungslogik: Der Aufbau der Anwendungslogik wurde bereits inder Vorlesung besprochen.
Die 3-Phasen des reaktiven GUI:
1)Schichtenaufbau● Aufbau Anwendungslogik● Aufbau des Input-Controller: empfängt Ereignisse● Aufbau der Widgets: Aufbau der Fensteroberfächen
2)Netzaufbau
3)Reaktionsphase
![Page 18: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/18.jpg)
© P
rof.
U. A
ßm
ann
18 Softwaretechnologie (ST)
Erinnerung: Schichtenarchitektur der reaktivenBenutzungsoberfäche (GUI)
Graphische Benutzungsoberfläche(Fensteroberfläche mit
Widget-Hierarchie,graphical user interface, GUI)
Fachliches Modell(Anwendungslogik)
Unsichtbare Ablauf-
Steuerung(Ereignis-
Verwaltung desLaufzeitsystems)
Play-In(asynchron)
Play-out(synchron, abermultiple Sichtenund pull-Steuerung)
Controller-Schicht
In-Controller
Out-C
ontroller
UI_Window
UI_Button
UI_Menu
A_Teambesprechung
A_Teammitglied
![Page 19: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/19.jpg)
© P
rof.
U. A
ßm
ann
19 Softwaretechnologie (ST)
Erinnerung: Modell, Controller und Views in strikterSchichtung
Methodenaufrufe=> Änderungen(play-in)
Benachrichtigungvieler Sichtenüber Änderungen(play-out, viele pull Observer)
Fachliche Klasse(Modell)
Sicht 1(View)
Sicht 2(View)
In-Controller1 In-Controller2
mehrerepush-Observer=> Änderungen(play-in, asynchronausgelöst)
Out-Controller1 Out-Controller2
![Page 20: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/20.jpg)
© P
rof.
U. A
ßm
ann
20 Softwaretechnologie (ST)
Controller sind Kollaborationen zwischen Model und View
Methodenaufrufe=> Änderungen(play-in)
Fachliche Klasse(Modell)
Sicht 1(View)
Sicht 2(View)
In-Controller1 In-Controller2 Out-Controller1 Out-Controller2
Play-In-Collaboration Play-Out-Collaboration
► Gibt es ein Hauptobjekt in der Kollaboration, ist der Controller ein Konnektor
![Page 21: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/21.jpg)
© P
rof.
U. A
ßm
ann
21 Softwaretechnologie (ST)
Modell, Controller und Views in schwacher Schichtung
Methodenaufrufe=> Änderungen(play-in)
DirekteBenachrichtigungvieler Sichtenüber Änderungen(play-out)
Fachliche Klasse(Modell)
Sicht 1(View)
Sicht 2(View)
In-Controller1 In-Controller2
mehrerepush-Observer=> Änderungen(play-in, asynchronausgelöst)
![Page 22: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/22.jpg)
Softwaretechnologie (ST) © Prof. U. Aßmann
Fakultät Informatik - Institut Software- und Multimediatechnik - Softwaretechnologie
70.2.1 Ereignismeldung beim Play-Inin Java-AWT-Anwendungen
Asynchrone Änderungen des Benutzers;push-Observer beim Play-In zwischen GUI und Input-
Controller
I claim not to have controlled events,but confess plainly that events have controlled me.
Abraham Lincoln, 1864
![Page 23: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/23.jpg)
© P
rof.
U. A
ßm
ann
23 Softwaretechnologie (ST)
Ereignisse und Benutzerinteraktionen
► Ein Ereignis ist ein Vorgang in der Umwelt des Softwaresystems vonvernachlässigbarer Dauer, der für das System von Bedeutung ist.
► Der Input-Controller empfängt vom View über die Ablaufsteuerung Ereignisse undmuss darauf reagieren, in dem der sie in Aktionen auf der Anwendungslogikübersetzt
► Eine wichtige Gruppe von Ereignissen sind Benutzeraktionen, Ereignisse, die eineAktion in einem Kontext der Benutzeroberfäche ausdrücken:
– Drücken eines Knopfs
– Auswahl eines Menüpunkts
– Verändern von Text
– Zeigen auf ein Gebiet
– Schließen eines Fensters
– Verbergen eines Fensters
– Drücken einer Taste
– Mausklick über einem Gebiet
![Page 24: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/24.jpg)
© P
rof.
U. A
ßm
ann
24 Softwaretechnologie (ST)
Schliessknopf
Beispiel für Ereignisverarbeitung
► Das erste Java-Programm in der Vorlesung mit einer "graphischen Benutzungsoberfäche"...
• Aufgabe: Ein leeres, aber schliessbares Fenster anzeigen
Fensterdarstellung ("look and feel") gemäß Windows:
Mac:Schliessknopf Motif:
![Page 25: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/25.jpg)
© P
rof.
U. A
ßm
ann
25 Softwaretechnologie (ST)
Ereignis-Klassen und ihre “auslösenden”Oberfächenelemente
► Ereignis-Klassen in (Java-)Benutzungsoberfächen drücken die Aktion oder denKontext der Benutzerinteraktion aus:
– WindowEvent
– ActionEvent
– MouseEvent, KeyEvent, ...
► Bezogen auf Klassen für Oberfächenelemente (Kontexte)
– Window
– Frame
– Button
– TextField, ...
► Zuordnung (Beispiele):
– Window (mit Frame) erzeugt WindowEvent
● z.B. Betätigung des Schliessknopfes
– Button erzeugt ActionEvent
● bei Betätigung des Knopfes
![Page 26: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/26.jpg)
© P
rof.
U. A
ßm
ann
26 Softwaretechnologie (ST)
Ereignis-Bearbeitung beim play-in (1)
Benutzer
Laufzeit-System (Ereignisverwaltung)
betätigt Schliessknopf
► Reaktion auf ein Ereignis durch Programm:
– Ereignis wird vom Laufzeitsystem (Ablaufsteuerung, Ereignisverwaltung)erkannt und in ein Ereignisobjekt (WindowEvent) umgewandelt
![Page 27: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/27.jpg)
© P
rof.
U. A
ßm
ann
27 Softwaretechnologie (ST)
Ereignis-Bearbeitung beim play-in (2)
<<controller>>l: FrameController
registriert Delegation (Push):Aufruf einer Methode von lmit Argument el ist push-WindowListener von f
e: WindowEventQuelle
Benutzer
Laufzeit-System
betätigt Schliessknopf
f: Frame
vom System (Ereignisverw.) neu erzeugt:
WindowListener
![Page 28: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/28.jpg)
© P
rof.
U. A
ßm
ann
28 Softwaretechnologie (ST)
Der Input-Controller interpretiert beim play-in die Ereignisse, die der Benutzerauf der Oberfläche auslöst und steuert die Operationen des Modells an.
Er stellt eine Steuerungsmaschine dar, der das fachliche Modell ansteuert.
Der Input-Controller interpretiert beim play-in die Ereignisse, die der Benutzerauf der Oberfläche auslöst und steuert die Operationen des Modells an.
Er stellt eine Steuerungsmaschine dar, der das fachliche Modell ansteuert.
Die Ansteuerung kann geschehen durch•Aufruf von Methoden der Anwendungsklassen•Senden von Botschaften mit http an den Server•Entfernter Aufruf von Methoden in Anwendungsklassen auf dem Server
Die Ansteuerung kann geschehen durch•Aufruf von Methoden der Anwendungsklassen•Senden von Botschaften mit http an den Server•Entfernter Aufruf von Methoden in Anwendungsklassen auf dem Server
![Page 29: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/29.jpg)
© P
rof.
U. A
ßm
ann
29 Softwaretechnologie (ST)
Hierarchie der AWT EventListener (Widget-Listeners) undEvent-Objekte
► AWTEvent ist die Klasse der Ereignisobjekte, die ein EventListener (Controller) empfangen kann(push)
WindowEvent
TextEvent
ChangeEvent
AWTEvent
ActionEvent
MenuEvent
PropertyChangeEvent
EventObject
![Page 30: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/30.jpg)
© P
rof.
U. A
ßm
ann
30 Softwaretechnologie (ST)
Hierarchie der AWT EventListener (Widget-Listeners) undEvent-Objekte
► Die Vererbungshierarchien EventListener (für den Controller) und AWTEvent werden parallelvariiert (Entwurfsmuster ParallelHierarchies)
WindowListener
TextListenervoid TextValueChanged(TextEvent e)
AWTEventListenervoid eventDispatched(AWTEvent event)
ChangeListenervoid stateChanged(ChangeEvent e)
WindowFocusListenervoid windowGainedFocus(WindowEvent e) void windowLostFocus(WindowEvent e)
EventListener
ActionListenervoid actionPerformed(ActionEvent e)
MenuListenervoid menuSelected(MenuEvent e)void menuCancelled(MenuEvent e)void menuDeselected(MenuEvent e)
PropertyChangeListenervoid propertyChange(PropertyChangeEvent evt)
WindowEvent
TextEvent
ChangeEvent
AWTEvent
ActionEvent
MenuEvent
PropertyChangeEvent
EventObject
![Page 31: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/31.jpg)
© P
rof.
U. A
ßm
ann
31 Softwaretechnologie (ST)
java.awt.event.WindowListener für play-in Observer
/** empty marker interface, from which all listeners have toinherit */
public interface EventListener { };
public interface WindowListener extends EventListener {
public void windowClosed (WindowEvent ev);
public void windowOpened (WindowEvent ev);
public void windowIconified (WindowEvent ev);
public void windowDeiconified (WindowEvent ev);
public void windowActivated (WindowEvent ev);
public void windowDeactivated (WindowEvent ev);
public void windowClosing (WindowEvent ev);
}
public class WindowEvent extends AWTEvent {
// Konstruktor, wird vom System aufgerufen public WindowEvent (Window source, int id);
// Abfragen
public Window getWindow();}
![Page 32: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/32.jpg)
© P
rof.
U. A
ßm
ann
32 Softwaretechnologie (ST)
java.awt.event.ActionEvent, ActionListener
public class ActionEvent extends AWTEvent {
...
// Konstruktor, wird vom System (Ereignisverwaltung) aufgerufen
public ActionEvent(Window source, int id, String command);
// Abfragen (queries)
public Object getSource ();
public String getActionCommand();
...
}
public interface ActionListener extends EventListener {
public void actionPerformed (ActionEvent ev);
}
![Page 33: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/33.jpg)
Softwaretechnologie (ST) © Prof. U. Aßmann
Fakultät Informatik - Institut Software- und Multimediatechnik - Softwaretechnologie
70.2.2 Phase 1b) Sehr einfache Input-Controllerals Implementierungen von EventListener-Schnittstellen (Play-In)
![Page 34: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/34.jpg)
© P
rof.
U. A
ßm
ann
34 Softwaretechnologie (ST)
Wer reagiert denn hier auf Ereignisse?
► Der Input-Controller ist ein Ereignis-Listener■ Ereignis-Listener sind zunächst Schnittstellen, keine Implementierungsklassen■ Der Input-Controller hat Ereignis-Listener-Schnittstelle
► Wie programmiert man (einfach) die Klassen, die die abhörenden Schnittstellenimplementieren?
– Eine neue Klasse (Implementierungsklasse)
– Anhang:● Eine Default-Implementierung benutzen (WindowAdapter)● Eine Unterklasse der Default-Implementierung WindowAdapter● Eine innere Klasse● Eine anonyme Klasse
![Page 35: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/35.jpg)
© P
rof.
U. A
ßm
ann
35 Softwaretechnologie (ST)
a) Implementierungsklasse WindowCloser für Ereignis"Schließen" aus WindowListener
import java.awt.*;import java.awt.event.*;
class WindowCloser implements WindowListener { // Reagiert nur auf Schließen public void windowClosed (WindowEvent ev) {}public void windowOpened (WindowEvent ev) {}
public void windowIconified (WindowEvent ev) {}public void windowDeiconified (WindowEvent ev) {}
public void windowActivated (WindowEvent ev) {} public void windowDeactivated (WindowEvent ev) {}
public void windowClosing(WindowEvent event) { System.exit(0);}
}
![Page 36: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/36.jpg)
© P
rof.
U. A
ßm
ann
36 Softwaretechnologie (ST)
Hauptprogramm für schließbares Fenster
import java.awt.*;import java.awt.event.*;
class WindowCloser implements WindowListener { ... siehe vorige Folie ...}
class ExampleFrame extends Frame {
public ExampleFrame () { setTitle("untitled"); setSize(150, 50); addWindowListener(new WindowCloser()); setVisible(true); }
}
class GUI2 { public static void main (String[] argv) { ExampleFrame f = new ExampleFrame();}
}
![Page 37: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/37.jpg)
Softwaretechnologie (ST) © Prof. U. Aßmann
Fakultät Informatik - Institut Software- und Multimediatechnik - Softwaretechnologie
70.2.3 Phase 1c) Hierarchischer Aufbau derBenutzungsoberfäche (Widget-Hierarchie) mit Swing
![Page 38: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/38.jpg)
© P
rof.
U. A
ßm
ann
38 Softwaretechnologie (ST)
Graphische BenutzungsoberfächenGraphical User Interfaces (GUI)
► 1980: Smalltalk-80-Oberfäche (Xerox)
► 1983/84: Lisa/Macintosh-Oberfäche (Apple)
► 1988: NextStep (Next)
► 1989: OpenLook (Sun)
► 1989: Motif (Open Software Foundation)
► 1987/91: OS/2 Presentation Manager (IBM)
► 1990: Windows 3.0 (Microsoft)
► 1995-2001: Windows 95/NT/98/2000/ME/XP (Microsoft)
► 1995: Java AWT (SunSoft)
► 1997: Swing Components for Java (SunSoft)
► 2002: SWT von Eclipse
► 2006: XAML, Silverlight (Microsoft)
– Xswt, xswing, XUL (Mozilla) etc.
![Page 39: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/39.jpg)
© P
rof.
U. A
ßm
ann
39 Softwaretechnologie (ST)
Hier: Expliziter Aufbau mit AWT und Swing
► Abstract Window Toolkit (AWT):
– Umfangreiche Bibliothek von Oberfächen-Bausteinen
– Plattformunabhängige Schnittstellen, aber grosse Teile plattformspezifschrealisiert ("native code")
► Swing-Bibliotheken
– Erweiterung von AWT
– Noch umfangreichere Bibliothek von Oberfächen-Bausteinen
– Plattformunabhängiger Code (d.h. Swing ist weitestgehend selbst in Java realisiert)
– Wesentlich größerer Funktionsumfang (nicht auf den "kleinsten Nenner" der Plattformen festgelegt)
![Page 40: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/40.jpg)
© P
rof.
U. A
ßm
ann
40 Softwaretechnologie (ST)
Bibliotheken von AWT und Swing
► Wichtigste AWT-Pakete:
– java.awt: u.a. Grafk, Oberfächenkomponenten, Layout-Manager
– java.awt.event: Ereignisbehandlung
– Andere Pakete für weitere Spezialzwecke
► Wichtigstes Swing-Paket:
– javax.swing: Oberfächenkomponenten
– Andere Pakete für Spezialzwecke
– Viele AWT-Klassen werden auch in Swing verwendet!
► Standard-Import-Vorspann:import java.awt.*;import java.awt.event.*;import javax.swing.*;
► (Naiver) Unterschied zwischen AWT- und Swing-Komponenten:
– AWT: Button, Frame, Menu, ...
– Swing: JButton, JFrame, JMenu, ...
![Page 41: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/41.jpg)
© P
rof.
U. A
ßm
ann
41 Softwaretechnologie (ST)
AWT/Swing-Klassenhierarchie (Ausschnitt)
lang.Object
awt.Component
awt.Container
swing.JComponent awt.Window
swing.JFrame
swing.JTextField
swing.JLabel
swing.JButton
swing.JPanel
swing.JTextComponent
► Dies ist nur ein sehr kleiner Ausschnitt
– Präfxe "java." und "javax." hier weggelassen.
![Page 42: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/42.jpg)
© P
rof.
U. A
ßm
ann
42 Softwaretechnologie (ST)
Component, Container, Window, Frame, Panel
► awt.Component (abstrakt):
– Oberklasse aller Bestandteile der Oberfächepublic void setSize (int width, int height);
public void setVisible (boolean b);
► awt.Container (abstrakt):
– Oberklasse aller Komponenten, die andere Komponenten enthaltenpublic void add (Component comp);
public void setLayout (LayoutManager mgr);
► awt.Window
– Fenster ohne Rahmen oder Menüs
public void pack (); //Größe anpassen
► swing.JFrame
– Größenveränderbares Fenster mit Titel
public void setTitle (String title);
► swing.JPanel
– Zusammenfassung von Swing-Komponenten
Component
Container
Window
JFrame
JPanel
![Page 43: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/43.jpg)
© P
rof.
U. A
ßm
ann
43 Softwaretechnologie (ST)
JComponent
► Oberklasse aller in der Swing-Bibliothek neu implementierten, verbessertenOberfächenkomponenten. Eigenschaften u.a.:
– Einstellbares "Look-and-Feel"
– Komponenten kombinierbar und erweiterbar
– Rahmen für Komponenten void setBorder (Border border);
(Border-Objekte mit BorderFactory erzeugbar)
– ToolTips -- Kurzbeschreibungen, die auftauchen, wenn der Cursor über derKomponente liegtvoid setToolTipText (String text);
– Automatisches Scrolling
► Beispiele für weitere Unterklassen von JComponent:
– JList: Auswahlliste
– JComboBox: "Drop-Down"-Auswahlliste mit Texteingabemöglichkeit
– JPopUpMenu: "Pop-Up"-Menü
– JFileChooser: Dateiauswahl
Component
Container
JComponent
![Page 44: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/44.jpg)
© P
rof.
U. A
ßm
ann
44 Softwaretechnologie (ST)
Zähler-Beispiel: Grobentwurf der Oberfäche
CounterFrame cfabgeleitet von JFrame
JPanelvaluePanel
JPanelbuttonPanel
![Page 45: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/45.jpg)
© P
rof.
U. A
ßm
ann
45 Softwaretechnologie (ST)
Die Sicht (View) mit Swing: Gliederung, 1. Versuch
class CounterFrame extends JFrame { JPanel valuePanel = new JPanel(); JTextField valueDisplay = new JTextField(10); JPanel buttonPanel = new JPanel(); JButton countButton = new JButton("Count"); JButton resetButton = new JButton("Reset"); JButton exitButton = new JButton("Exit");
public CounterFrame (A_Counter c) { setTitle("SwingCounter"); valuePanel.add(new JLabel("Counter value")); valuePanel.add(valueDisplay); valueDisplay.setEditable(false); // .. value panel hinzufügen getContentPane().add(valuePanel, BorderLayout.NORTH); buttonPanel.add(countButton); buttonPanel.add(resetButton); buttonPanel.add(exitButton); // .. button panel hinzufügen getContentPane().add(buttonPanel, BorderLayout.SOUTH); pack(); setVisible(true); }}
Subjekt starten (Ereignisverwaltung)
![Page 46: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/46.jpg)
© P
rof.
U. A
ßm
ann
46 Softwaretechnologie (ST)
Hinzufügen von Komponenten zu JFrames
► Ein JFrame ist ein "Container", d.h. dient zur Aufnahme weiterer Elemente.
► Ein JFrame ist intern in verschiedene "Scheiben" (panes) organisiert. Die wichtigsteist die content pane.
• In JFrame ist definiert:Container getContentPane();
glass panelayered panemenu barcontent pane
![Page 47: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/47.jpg)
© P
rof.
U. A
ßm
ann
47 Softwaretechnologie (ST)
Die Sicht (View): Gliederung, 2. Versuch
class CounterFrame extends JFrame { JPanel valuePanel = new JPanel(); JPanel buttonPanel = new JPanel();
public CounterFrame (A_Counter c) { setTitle("SwingCounter"); getContentPane().add(valuePanel);
getContentPane().add(buttonPanel); pack(); setVisible(true); }}
![Page 48: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/48.jpg)
© P
rof.
U. A
ßm
ann
48 Softwaretechnologie (ST)
Zähler-Beispiel: Entwurf der Wertanzeige
JPanelvaluePanel
JLabelvalueLabel
JTextFieldvalueDisplay
![Page 49: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/49.jpg)
© P
rof.
U. A
ßm
ann
49 Softwaretechnologie (ST)
TextComponent, TextField, Label, Button
► JTextComponent:
– Oberklasse von JTextField und JTextAreapublic void setText (String t);
public String getText ();
public void setEditable (boolean b);
► JTextField:
– Textfeld mit einer Zeile public JTextField (int length);
► JLabel:
– Einzeiliger unveränderbarer Textpublic JLabel (String text);
► JButton:
– Druckknopf mit Textbeschriftungpublic JButton (String label);
Component
Container
JComponent
JTextComponent
JTextField
JLabel
JButton
![Page 50: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/50.jpg)
© P
rof.
U. A
ßm
ann
50 Softwaretechnologie (ST)
Die Sicht (View): Elemente der Wertanzeige
class CounterFrame extends JFrame { JPanel valuePanel = new JPanel(); JTextField valueDisplay = new JTextField(10); JPanel buttonPanel = new JPanel();
public CounterFrame (A_Counter c) { setTitle("SwingCounter"); valuePanel.add(new JLabel("Counter value")); valuePanel.add(valueDisplay); valueDisplay.setEditable(false); getContentPane().add(valuePanel);
getContentPane().add(buttonPanel); pack(); setVisible(true); }}
class CounterFrame extends JFrame { JPanel valuePanel = new JPanel(); JTextField valueDisplay = new JTextField(10); JPanel buttonPanel = new JPanel();
public CounterFrame (A_Counter c) { setTitle("SwingCounter"); valuePanel.add(new JLabel("Counter value")); valuePanel.add(valueDisplay); valueDisplay.setEditable(false); getContentPane().add(valuePanel);
getContentPane().add(buttonPanel); pack(); setVisible(true); }}
![Page 51: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/51.jpg)
© P
rof.
U. A
ßm
ann
51 Softwaretechnologie (ST)
Zähler-Beispiel: Entwurf der Bedienelemente der Sicht
JPanelbuttonPanel
JButtoncountButton
JButtonresetButton
JButtonexitButton
![Page 52: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/52.jpg)
© P
rof.
U. A
ßm
ann
52 Softwaretechnologie (ST)
Der Aufbau der Sicht (Swing View): Bedienelemente
class CounterFrame extends JFrame { JPanel valuePanel = new JPanel(); JTextField valueDisplay = new JTextField(10); JPanel buttonPanel = new JPanel(); JButton countButton = new JButton("Count"); JButton resetButton = new JButton("Reset"); JButton exitButton = new JButton("Exit");
public CounterFrame (A_Counter c) { setTitle("SwingCounter"); valuePanel.add(new JLabel("Counter value")); valuePanel.add(valueDisplay); valueDisplay.setEditable(false); getContentPane().add(valuePanel); buttonPanel.add(countButton); buttonPanel.add(resetButton); buttonPanel.add(exitButton); getContentPane().add(buttonPanel); pack(); setVisible(true); }}
class CounterFrame extends JFrame { JPanel valuePanel = new JPanel(); JTextField valueDisplay = new JTextField(10); JPanel buttonPanel = new JPanel(); JButton countButton = new JButton("Count"); JButton resetButton = new JButton("Reset"); JButton exitButton = new JButton("Exit");
public CounterFrame (A_Counter c) { setTitle("SwingCounter"); valuePanel.add(new JLabel("Counter value")); valuePanel.add(valueDisplay); valueDisplay.setEditable(false); getContentPane().add(valuePanel); buttonPanel.add(countButton); buttonPanel.add(resetButton); buttonPanel.add(exitButton); getContentPane().add(buttonPanel); pack(); setVisible(true); }}
![Page 53: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/53.jpg)
Softwaretechnologie (ST) © Prof. U. Aßmann
Fakultät Informatik - Institut Software- und Multimediatechnik - Softwaretechnologie
70.3 Phase 2) Verdrahtung GUI undAnwendungslogik mit MVC
mit starker Schichung und aktivem Controller
► Die folgenden Beispiele nutzen die Präfxe:
► UI_ : gehört zur UI-Schicht
► C_ : gehört zum Controllerschicht
► A_ : gehört zur Anwendungslogik
![Page 54: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/54.jpg)
Softwaretechnologie (ST) © Prof. U. Aßmann
Fakultät Informatik - Institut Software- und Multimediatechnik - Softwaretechnologie
70.3.1 Architekturvarianten: Strikte,semi-strikte oder schwache Schichtungdes Play-Out
► Controller für IN oder auch für OUT
![Page 55: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/55.jpg)
© P
rof.
U. A
ßm
ann
55 Softwaretechnologie (ST)
Controller sind Konnektoren zwischen Model und View
Methodenaufrufe=> Änderungen(play-in)
Fachliche Klasse(Modell)
Sicht 1(View)
Sicht 2(View)
In-Controller1 In-Controller2 Out-Controller1 Out-Controller2
Play-In-Connector Play-Out-Connector
► Im Folgenden gibt es ein Hauptobjekt, den Konnektor, der View, Controllerund Modell verdrahtet
![Page 56: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/56.jpg)
© P
rof.
U. A
ßm
ann
56 Softwaretechnologie (ST)
v1:View
Wdh.: Strikte Schichtung, indirekte KommunikationPlay-In mit passivem View und pull-In-Controller; Passives Play-Out mit indirektem pull-Out-View
c1:Controllerm:Application
Model
redraw()
c2:Controller v2:View
update()redraw()
pull()
pull()
update()
Play-Out 2
Play-Out 1
register()register() register()
register()
pull()
pull()
notify(Event)update()
pull()
writeToModel()
Play-In
![Page 57: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/57.jpg)
© P
rof.
U. A
ßm
ann
57 Softwaretechnologie (ST)
Controller 1(pro Sicht)
MVC Dynamik (Semi-striktes Play-Out)
► Semi-striktes Schichtung des Play-Out erlaubt dem View, das Model zu sehen (weniger modular,mehr Abhängigkeiten)
■ View wird indirekt benachrichtigt (indirekter Update)■ View greift beim pull direkt auf das Modell zu (stärker gekoppelt, da das View das Modell
kennen muss)
ScreenBuffer
View 1 - Widget Tree 1(Fenster-Struktur)
Modell: Datenstrukturin Anwendungslogik
(und Datenbank)
widget-Observer
Controller
register asplay-in Observer
b) pull, getData(play-out Observer)
push-write
![Page 58: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/58.jpg)
© P
rof.
U. A
ßm
ann
58 Softwaretechnologie (ST)
v1:View
Semi-strikte Schichtung des Play-OutPlay-In mit pull-In-Controller; Passives Play-Out mit direktem pull-Out-View
c1:Controllerm:Application
Model
notify(Event)update()
pull()
writeToModel()
redraw()
c2:Controller v2:View
update()
redraw()pull()
pull()
update()
Play-In
Play-Out 2
Play-Out 1
register()register() register()
register()
► Mehrere Views pro Controller, mehrere Controller pro Model
![Page 59: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/59.jpg)
© P
rof.
U. A
ßm
ann
59 Softwaretechnologie (ST)
Controller 1(pro Sicht)
MVC Dynamik (Schwache Schichtung des Play-Out)
► Play-Out-Observer mit direkter Kopplung von Model und View
– Modell ist aktiv, benachrichtigt View direkt
– Widget greift mit pull direkt auf das Modell zu (stärker gekoppelt, da das View das Modellkennen muss)
► Bei aktivem Modell und direktem pull-out wird im Play-Out der Controller umgangen
► Die Entscheidung über Redraw liegt bei View, nicht beim Controller
ScreenBuffer
View 1 - Widget Tree 1(Fenster-Struktur)
Modell: Datenstrukturin Anwendungslogik
(und Datenbank)
widget-Observer
Controller
register asplay-in Observer
b) pull, getData(play-out Observer)
push-write
![Page 60: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/60.jpg)
© P
rof.
U. A
ßm
ann
60 Softwaretechnologie (ST)
v1:View
Schwache Schichtung des Play-OutPlay-In mit pull-In-Controller; Passives Play-Out mit direktem pull-Out-View
c1:Controllerm:Application
Model
notify(Event)update()
pull()
writeToModel()
c2:Controller v2:View
update()
pull()
pull()
update()
Play-In
Play-Out 2
Play-Out 1
register()register() register()
register()
► Mehrere Views pro Controller, mehrere Controller pro Model
![Page 61: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/61.jpg)
© P
rof.
U. A
ßm
ann
61 Softwaretechnologie (ST)
Varianten von MVC
Architekturprinzip Strikte Schichtung(strictly passive model)
Semi-strikteSchichtung (weaklypassive model)
Schwache Schichtung
Wer benachrichtigt,dass das Modellgeändert ist? (update)
indirekter Update viaController(passive model)
indirekter UpdateModell → Controller →Observer
direkter Update Modell→ View
Wer transportiert dieDaten des geändertenZustandes?
indirekter pull-outView → Observer →Model
direkter pull-out View→ Model
direkter pull-out View→ Model
![Page 62: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/62.jpg)
Softwaretechnologie (ST) © Prof. U. Aßmann
Fakultät Informatik - Institut Software- und Multimediatechnik - Softwaretechnologie
70.3.2 Beispiel für Phase 2) Verdrahtung GUIund Anwendungslogik mit Modularem MVC
mit schwacher Schichung und aktivem IN-Controller
► Die folgenden Beispiele nutzen die Präfxe:
► UI_ : gehört zur UI-Schicht
► C_ : gehört zum Controllerschicht
► A_ : gehört zur Anwendungslogik
![Page 63: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/63.jpg)
© P
rof.
U. A
ßm
ann
63 Softwaretechnologie (ST)
Controller sind Konnektoren zwischen Model und View
Methodenaufrufe=> Änderungen(play-in)
Fachliche Klasse(Modell)
Sicht 1(View)
Sicht 2(View)
In-Controller1 In-Controller2 Out-Controller1 Out-Controller2
Play-In-Connector Play-Out-Connector
► Im Folgenden gibt es ein Hauptobjekt, den Konnektor, der View, Controllerund Modell verdrahtet
![Page 64: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/64.jpg)
© P
rof.
U. A
ßm
ann
64 Softwaretechnologie (ST)
Geschichtete Model-View-Controller-Architektur
c: A_Counter
ctr = 7
A_Counter
+ count()+ reset()
+ getValue()
– ctr
Model
cf: CounterFrame
View
<<beobachtet>>
bc: ButtonController
In-Controller
<<steuert, schreibt>>
<<beobachtet>>
► GUI-Reagiert-Auf-Modelländerungen mit Out-Controller (push-Observer, Play-Out)
► Modell-Reagiert-Auf-View mit In-Controller (push-Observer, Play-In)
Play-Out
Play-In
Out-Controller
out: OutController
<<steuert>>
![Page 65: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/65.jpg)
© P
rof.
U. A
ßm
ann
65 Softwaretechnologie (ST)
Semi-strikte Model-View-Controller-Architektur
c: A_Counter
ctr = 7
A_Counter
+ count()+ reset()
+ getValue()
– ctr
Model
cf: CounterFrame
View
<<beobachtet>>
bc: ButtonController
In-Controller
<<steuert, schreibt>>
<<beobachtet>>
► Modell-Reagiert-Auf-View mit In-Controller (push-Observer, Play-In)
► GUI-Reagiert-Auf-Modelländerungen: direkt (push-Observer, Play-Out)
Play-Out
Play-In
![Page 66: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/66.jpg)
© P
rof.
U. A
ßm
ann
66 Softwaretechnologie (ST)
Beispiel „A_Counter“ für das Play-In: Anbindung View an Model
class UI_CounterFrame extends JFrame implements Observer { JTextField valueDisplay = new JTextField(10); /** Assembling the widget tree of the counter is separate from linking it to the Controller */ public UI_CounterFrame (int i) {
setTitle("SwingCounter");valuePanel.add(new JLabel("Counter value"));valuePanel.add(valueDisplay);valueDisplay.setEditable(false);valueDisplay.setText(String.valueOf(i));getContentPane().add(valuePanel,BorderLayout.NORTH);
buttonPanel.add(countButton);buttonPanel.add(resetButton);buttonPanel.add(exitButton);getContentPane().add(buttonPanel,BorderLayout.SOUTH);/* Show the widget tree on the screen */pack();setVisible(true);
} /** Separate: Linking the private buttons in the widget tree to the C_ButtonInputController. */ public void linkButtonsToInputController( C_ButtonInputController bic) { countButton.addActionListener(bic); resetButton.addActionListener(bic); exitButton.addActionListener(bic); }
class UI_CounterFrame extends JFrame implements Observer { JTextField valueDisplay = new JTextField(10); /** Assembling the widget tree of the counter is separate from linking it to the Controller */ public UI_CounterFrame (int i) {
setTitle("SwingCounter");valuePanel.add(new JLabel("Counter value"));valuePanel.add(valueDisplay);valueDisplay.setEditable(false);valueDisplay.setText(String.valueOf(i));getContentPane().add(valuePanel,BorderLayout.NORTH);
buttonPanel.add(countButton);buttonPanel.add(resetButton);buttonPanel.add(exitButton);getContentPane().add(buttonPanel,BorderLayout.SOUTH);/* Show the widget tree on the screen */pack();setVisible(true);
} /** Separate: Linking the private buttons in the widget tree to the C_ButtonInputController. */ public void linkButtonsToInputController( C_ButtonInputController bic) { countButton.addActionListener(bic); resetButton.addActionListener(bic); exitButton.addActionListener(bic); }
![Page 67: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/67.jpg)
© P
rof.
U. A
ßm
ann
67 Softwaretechnologie (ST)
Connector: Anbindung aller Schichten
/** The Connector class connects UI, A, and the in- and * out-controllers (C) (wiring). */ class ControlConnector { /** Linking the window in the widget tree to the C_WindowInputController. */ public void linkWindowInputController(UI_CounterFrame cf, C_WindowInputController wic) {
// IN Observer for Windowscf.addWindowListener(wic);
} /** This links the buttons in the widget tree to the * C_ButtonInputController. The layout of the widget tree * is private to UI_CounterFrame; therefore, we delegate * to UI_CounterFrame.linkButtonToInputController.*/ public void linkButtonInputController(UI_CounterFrame cf, C_ButtonInputController bic) {
cf.linkButtonsToInputController(bic); } // Linking model and input controller public void linkInputControllerToModel(C_ButtonInputController bic, A_Counter counter) {
bic.setModel(counter); } // OUT-Observer: link Model and View directly (weak layering) public void linkWidgetsToModelDirectly(A_Counter counter, UI_CounterFrame cf) {
counter.addObserver(cf); }}
/** The Connector class connects UI, A, and the in- and * out-controllers (C) (wiring). */ class ControlConnector { /** Linking the window in the widget tree to the C_WindowInputController. */ public void linkWindowInputController(UI_CounterFrame cf, C_WindowInputController wic) {
// IN Observer for Windowscf.addWindowListener(wic);
} /** This links the buttons in the widget tree to the * C_ButtonInputController. The layout of the widget tree * is private to UI_CounterFrame; therefore, we delegate * to UI_CounterFrame.linkButtonToInputController.*/ public void linkButtonInputController(UI_CounterFrame cf, C_ButtonInputController bic) {
cf.linkButtonsToInputController(bic); } // Linking model and input controller public void linkInputControllerToModel(C_ButtonInputController bic, A_Counter counter) {
bic.setModel(counter); } // OUT-Observer: link Model and View directly (weak layering) public void linkWidgetsToModelDirectly(A_Counter counter, UI_CounterFrame cf) {
counter.addObserver(cf); }}
![Page 68: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/68.jpg)
© P
rof.
U. A
ßm
ann
68 Softwaretechnologie (ST)
// Die Steuerung belauscht die Knöpfe und interpretiert die Ereignisseclass ButtonInputController implements ActionListener { // In-Controller A_Counter myCounter; // push-Observer interpretiert Kommandos (Steuerungsmaschine) public void actionPerformed (ActionEvent event) { // Hier nur ein Grundzustand String cmd = event.getActionCommand(); if (cmd.equals("Count")) myCounter.count(); // write: Aktion auf fachlichem Modell if (cmd.equals("Reset")) myCounter.reset(); // write: Aktion auf fachlichem Modell if (cmd.equals("Exit")) System.exit(0); // Aktion: Beende Programm }
/** Record the model object in the InputController, for read and write actions. */ public void setModel(A_Counter c) { myCounter = c; }}
// Die Steuerung belauscht die Knöpfe und interpretiert die Ereignisseclass ButtonInputController implements ActionListener { // In-Controller A_Counter myCounter; // push-Observer interpretiert Kommandos (Steuerungsmaschine) public void actionPerformed (ActionEvent event) { // Hier nur ein Grundzustand String cmd = event.getActionCommand(); if (cmd.equals("Count")) myCounter.count(); // write: Aktion auf fachlichem Modell if (cmd.equals("Reset")) myCounter.reset(); // write: Aktion auf fachlichem Modell if (cmd.equals("Exit")) System.exit(0); // Aktion: Beende Programm }
/** Record the model object in the InputController, for read and write actions. */ public void setModel(A_Counter c) { myCounter = c; }}
Die Steuerung des Play-In mit dem In-Controller
► Zum Play-In wird der Controller ein Listener der View-Widgets (hier buttons)
► Die update-Methode heisst java.awt.ActionListener.actionPerformed(ActionEvent), da die Ablaufsteuerung des JDK diese sucht und aufruft
► Der Controller interpretiert die Eingaben des Benutzers und setzt sie auf das Model um(Steuerungsmaschine)
► Nutzt Entwurfsmuster State, Integerstate oder ImplicitIntegerState
![Page 69: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/69.jpg)
© P
rof.
U. A
ßm
ann
69 Softwaretechnologie (ST)
Alles zusammen: MVCModularDirectPlayOut.java
class MVCModularDirectPlayOut { public static void main (String[] argv) { // Phase 1a: Build application logic layer A_Counter counter = new A_Counter();
// Phase 1b: Build Controller Layer ControlConnector connector = new ControlConnector(); C_ButtonInputController bic = new C_ButtonInputController(); C_WindowInputController wic = new C_WindowInputController();
// Phase 1c: Build widget tree for display on screen UI_CounterFrame cf= new UI_CounterFrame(counter.getValue());
// Phase 2: Connect Widget Tree and Application Logic, by // executing the wiring methods of the // GUI-Application-Logic connector connector.linkWindowInputController(cf,wic); connector.linkButtonInputController(cf,bic); connector.linkInputControllerToModel(bic,counter); connector.linkWidgetsToModelDirectly(counter,cf);
// .. implizites Betreten der Reaktionsschleife: // Phase 3: reaktives Programm }
}
class MVCModularDirectPlayOut { public static void main (String[] argv) { // Phase 1a: Build application logic layer A_Counter counter = new A_Counter();
// Phase 1b: Build Controller Layer ControlConnector connector = new ControlConnector(); C_ButtonInputController bic = new C_ButtonInputController(); C_WindowInputController wic = new C_WindowInputController();
// Phase 1c: Build widget tree for display on screen UI_CounterFrame cf= new UI_CounterFrame(counter.getValue());
// Phase 2: Connect Widget Tree and Application Logic, by // executing the wiring methods of the // GUI-Application-Logic connector connector.linkWindowInputController(cf,wic); connector.linkButtonInputController(cf,bic); connector.linkInputControllerToModel(bic,counter); connector.linkWidgetsToModelDirectly(counter,cf);
// .. implizites Betreten der Reaktionsschleife: // Phase 3: reaktives Programm }
}
![Page 70: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/70.jpg)
Softwaretechnologie (ST) © Prof. U. Aßmann
Fakultät Informatik - Institut Software- und Multimediatechnik - Softwaretechnologie
70.5 Zusammenfassung
![Page 71: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/71.jpg)
© P
rof.
U. A
ßm
ann
71 Softwaretechnologie (ST)
c:Controllerc:Controller
Überblick MVC ohne Zuordnung zur Schichtung
c:Controller
v:Viewv:View
v:View
m:Model
1
*
1 1
*
1
[Herrmann]
changemessagesobserver
changemessagesobserver
user input observer
direct changemessages
model read
model change
{xor}
![Page 72: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/72.jpg)
© P
rof.
U. A
ßm
ann
72 Softwaretechnologie (ST)
c:Controllerc:Controller
Überblick MVC (Active Model, Schwache Schichtung)
c:Controller
v:Viewv:View
v:View
m:Model
1
*
1 1
*
1
changemessagesobserver
changemessagesobserver
user input observer
model read
model change
► Mit aktivem Model wird der View direkt vom Model benachrichtigt, und ziehtdanach bei Bedarf die Daten aus dem Model
► Entscheidung über Redraw liegt beim View
![Page 73: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/73.jpg)
© P
rof.
U. A
ßm
ann
73 Softwaretechnologie (ST)
c:Controllerc:Controller
Überblick MVC (Passive Model, Semi-strikte Schichtung)
c:Controller
v:Viewv:View
v:View
m:Model
1
*
1 1
1
user input observer
direct changemessages
model read
model change
► Mit passivem Model zieht zwar der View die Daten aus dem Model, wird aber indirekt über den Controller benachrichtigt
► Entscheidung über Redraw liegt beim Controller
changemessagesobserver
![Page 74: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/74.jpg)
© P
rof.
U. A
ßm
ann
74 Softwaretechnologie (ST)
c:Controllerc:Controller
Überblick MVC (Passive Model, Strikte Schichtung)
c:Controller
v:Viewv:View
v:View
m:Model
1
*
1
1user input observer
direct changemessages
model read
model change
► Mit passivem Model zieht zwar der View die Daten aus dem Model, wird aber indirekt über den Controller benachrichtigt
► Entscheidung über Redraw liegt beim Controller
changemessagesobserver
model read
![Page 75: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/75.jpg)
© P
rof.
U. A
ßm
ann
75 Softwaretechnologie (ST)
Was haben wir gelernt?
► GUI-Programme laufen in 3 Phasen:
– Aufbau der Fensterfronten (widget hierarchies) durch Konstruktoraufrufe undAdditionen (embodiment)
– Netzaufbau (Konnektor):● Vorbereitung Play-Out: Anschluß des View-Reaktionscodes als jdk-
Observer des Modells● Vorbereitung Play-In: Anschluß des Controller als widget-Observer der
Views, , oder mit Servlet in Spring
– Reaktionsphase, bei der die Benutzeraktionen vom System als Ereignisobjekte insProgramm gegeben werden:
● der Controller als Listener benachrichtigt und ausgeführt werden (Play-In)● die Views bzw. der Controller als Listener des Modells benachrichtigt werden
(Play-Out)
► Der Kontrollfuß eines GUI-Programms wird nie explizit spezifziert, sondern ergibtsich aus den Aktionen des Benutzers
– Die Views reagieren auf Ereignisse im Screenbuffer, die von der Ablaufsteuerunggemeldet werden
– Der Controller auf Widget-Veränderungen im View
– Die Views auf Veränderungen im Modell
![Page 76: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/76.jpg)
© P
rof.
U. A
ßm
ann
76 Softwaretechnologie (ST)
The End
► © Prof. H. Hussmann, Prof. U. Aßmann 1998-2013. used by permission. Verbreitung,Kopieren nur mit Zustimmung der Autoren.
![Page 77: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/77.jpg)
Softwaretechnologie (ST) © Prof. U. Aßmann
Fakultät Informatik - Institut Software- und Multimediatechnik - Softwaretechnologie
70.A.1 Phase 1b) Weitere einfache Input-Controller als Implementierungen von EventListener-Schnittstellen (Play-In)
![Page 78: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/78.jpg)
© P
rof.
U. A
ßm
ann
78 Softwaretechnologie (ST)
b) Vereinfachung 1: Unterklasse der Default-Implementierung WindowAdapter
► WindowAdapter bietet eine Default-Implementierung für die WindowListener-Funktionen an:
package java.awt.event;
public abstract class WindowAdapter
implements WindowListener {
public void windowClosed (WindowEvent ev) {}
public void windowOpened (WindowEvent ev) {}
public void windowIconified (WindowEvent ev) {}
public void windowDeiconified (WindowEvent ev) {}
public void windowActivated (WindowEvent ev) {}
public void windowDeactivated (WindowEvent ev) {}
public void windowClosing (WindowEvent ev) {}
}
![Page 79: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/79.jpg)
© P
rof.
U. A
ßm
ann
79 Softwaretechnologie (ST)
Vereinfachung 1: Unterklasse der Default-ImplementierungWindowAdapter
► Redefnition einer leeren Reaktionsmethode:import java.awt.*;import java.awt.event.*;
class WindowCloser extends WindowAdapter { public void windowClosing(WindowEvent event) {
System.exit(0);}
}
class ExampleFrame extends Frame {
public ExampleFrame () { setTitle("untitled"); setSize(150, 50); addWindowListener(new WindowCloser()); setVisible(true); }
}
class GUI3 {public static void main (String[] argv) {
ExampleFrame f = new ExampleFrame();}}
![Page 80: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/80.jpg)
© P
rof.
U. A
ßm
ann
80 Softwaretechnologie (ST)
Vereinfachung 1: Unterklasse der DefaultImplementierungWindowAdapter
WindowCloserregistriert bei
Frame
ExampleFrame
setSizesetTitle
setVisible
Window
addWindowListener (l: WindowListener)
<<interface>>WindowListener
windowClosing (e: WindowEvent)
WindowEvent
<<use>>
WindowAdapter
![Page 81: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/81.jpg)
© P
rof.
U. A
ßm
ann
81 Softwaretechnologie (ST)
WindowAdapter ist eine Default-Implementierung
<<interface>>WindowListener
windowClosing (e: WindowEvent)window... ()......
WindowAdapter
Adapter
WindowCloser
windowClosing (e: WindowEvent)
Ist das eineAnwendung des
Adapter-Musters?
Target Adaptee
Adapter
.. sollte besserDefaultWindowListener
heissen..
![Page 82: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/82.jpg)
© P
rof.
U. A
ßm
ann
82 Softwaretechnologie (ST)
b) Vereinfachung 2: Innere Klasse benutzen
import java.awt.*;import java.awt.event.*;
class ExampleFrame extends Frame {
/* inner */ class WindowCloser extends WindowAdapter { public void windowClosing(WindowEvent event) {
System.exit(0); }
}
public ExampleFrame () { setTitle("untitled"); setSize(150, 50); addWindowListener(new WindowCloser()); setVisible(true); }
}
class GUI4 {public static void main (String[] argv) {
ExampleFrame f = new ExampleFrame();}}
![Page 83: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/83.jpg)
© P
rof.
U. A
ßm
ann
83 Softwaretechnologie (ST)
c) Vereinfachung 3: Anonyme Klasse benutzen
import java.awt.*;import java.awt.event.*;
class ExampleFrame extends Frame {
public ExampleFrame () { setTitle("untitled"); setSize(150, 50); addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent event) { System.exit(0); }}); setVisible(true); }
}
class GUI5 {public static void main (String[] argv) {
ExampleFrame f = new ExampleFrame(); }}
![Page 84: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/84.jpg)
Softwaretechnologie (ST) © Prof. U. Aßmann
Fakultät Informatik - Institut Software- und Multimediatechnik - Softwaretechnologie
70.A.2 Layout Control von Widgets
![Page 85: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/85.jpg)
© P
rof.
U. A
ßm
ann
85 Softwaretechnologie (ST)
Layout-Manager für Fensterelemente
► Def.: Ein Layout-Manager ist ein Objekt, das Methoden bereitstellt, um diegraphische Repräsentation verschiedener Objekte innerhalb eines Container-Objektes anzuordnen.
► Formal ist LayoutManager ein Interface, für das viele Implementierungen möglichsind.
► In Java defnierte Layout-Manager (Auswahl):
– FlowLayout (java.awt.FlowLayout)
– BorderLayout (java.awt.BorderLayout)
– GridLayout (java.awt.GridLayout)
► In awt.Component:public void add (Component comp, Object constraints);
erlaubt es, zusätzliche Information (z.B. Orientierung, Zeile/Spalte) an den Layout-Manager zu übergeben
![Page 86: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/86.jpg)
© P
rof.
U. A
ßm
ann
86 Softwaretechnologie (ST)
Flow-Layout
► Grundprinzip:
– Anordnung analog Textfuß: von links nach rechts und von oben nach unten
► Default für Panels
– z.B. in valuePanel und buttonPanelfür Hinzufügen von Labels, Buttons etc.
► Parameter bei Konstruktor: Orientierung auf Zeile, Abstände
► Constraints bei add: keine
1 2 3 4 5
6
![Page 87: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/87.jpg)
© P
rof.
U. A
ßm
ann
87 Softwaretechnologie (ST)
Border-Layout
► Grundprinzip:
– Orientierung nach den Seiten (N, S, W, O) bzw. Mitte (center)
► Default für Window, Frame
– z.B. in CounterFramefür Hinzufügen von valuePanel, buttonPanel
► Parameter bei Konstruktor: Keine
► Constraints bei add:
– BorderLayout.NORTH, SOUTH, WEST, EAST, CENTER
Oberer ("Nord")-Bereich(z.B. valuePanel)
Unterer ("Süd")-Bereich(z.B. buttonPanel)
![Page 88: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/88.jpg)
© P
rof.
U. A
ßm
ann
88 Softwaretechnologie (ST)
Grid-Layout
► Grundprinzip:
– Anordnung nach Zeilen und Spalten
► Parameter bei Konstruktor:
– Abstände, Anzahl Zeilen, Anzahl Spalten
► Constraints bei add: Keine
1,1 1,2 1,3
2,1 2,2 2,3
![Page 89: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/89.jpg)
© P
rof.
U. A
ßm
ann
89 Softwaretechnologie (ST)
class CounterFrame extends JFrame { JPanel valuePanel = new JPanel(); JTextField valueDisplay = new JTextField(10); JPanel buttonPanel = new JPanel(); JButton countButton = new JButton("Count"); JButton resetButton = new JButton("Reset"); JButton exitButton = new JButton("Exit");
public CounterFrame (A_Counter c) { setTitle("SwingCounter"); valuePanel.add(new JLabel("Counter value")); valuePanel.add(valueDisplay); valueDisplay.setEditable(false); getContentPane().add(valuePanel, BorderLayout.NORTH); buttonPanel.add(countButton); buttonPanel.add(resetButton); buttonPanel.add(exitButton); getContentPane().add(buttonPanel, BorderLayout.SOUTH); pack(); setVisible(true); }}
Die Sicht (View): Alle sichtbaren Elemente
![Page 90: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/90.jpg)
Softwaretechnologie (ST) © Prof. U. Aßmann
Fakultät Informatik - Institut Software- und Multimediatechnik - Softwaretechnologie 70.A.2 Direkte Verdrahtung GUI undAnwendungslogik mit MVC
► mit schwacher Schichung und aktivem Modell (Views beobachtendas Modell)
► ohne Connector-Klasse, mit direkter Verdrahtung (nicht modular)
![Page 91: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/91.jpg)
© P
rof.
U. A
ßm
ann
91 Softwaretechnologie (ST)
Schwach geschichtete Model-View-Controller-Architektur
c: A_Counter
ctr = 7
A_Counter
+ count()+ reset()
+ getValue()
– ctr
Model
cf: CounterFrame
View
<<beobachtet>><<data push>>
bc: ButtonController
Controller
<<steuert, schreibt>>
<<beobachtet>>
► GUI-Reagiert-Auf-Modelländerungen: (push-Observer, Play-Out)
► Modell-Reagiert-Auf-View: Controller (push-Observer, Play-In)
Play-Out
Play-In
![Page 92: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/92.jpg)
© P
rof.
U. A
ßm
ann
92 Softwaretechnologie (ST)
Zähler-Beispiel für das Play-Out: Anbindung View an Model
class CounterFrame extends JFrame // View implements Observer { ... JTextField valueDisplay = new JTextField(10); ... // connecting model to view public CounterFrame /*View*/ (A_Counter c /*Model*/) { ... valuePanel.add(valueDisplay); valueDisplay.setEditable(false); valueDisplay.setText(String.valueOf(c.getValue())); ... c.addObserver(this); // Registring view at model pack(); setVisible(true); } // Wire View so that it listens at model for update // and data push // weak layering: Controller is not involved in play-out public void update (Observable o, Object arg) { A_Counter c = (A_Counter) o; valueDisplay.setText(String.valueOf(c.getValue())); }}
![Page 93: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/93.jpg)
© P
rof.
U. A
ßm
ann
93 Softwaretechnologie (ST)
Play-In mit ActionListener (Wdh.)java.awt.event.ActionEvent, ActionListener
public class ActionEvent extends AWTEvent {...// Konstruktor wird vom System aufgerufen
public Object getSource ()public String getActionCommand()...
}
public interface ActionListener extends EventListener {
public void actionPerformed (ActionEvent ev);
}
![Page 94: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/94.jpg)
© P
rof.
U. A
ßm
ann
94 Softwaretechnologie (ST)
// Die Steuerung belauscht die Knöpfe und interpretiert die Ereignisseclass ButtonController // In-Controller implements ActionListener { A_Counter myCounter; // push-Observer interpretiert Kommandos public void actionPerformed (ActionEvent event) { // Hier nur ein Grundzustand String cmd = event.getActionCommand(); if (cmd.equals("Count")) myCounter.count(); // write: Aktion auf fachlichem Modell if (cmd.equals("Reset")) myCounter.reset(); // write: Aktion auf fachlichem Modell if (cmd.equals("Exit")) System.exit(0); // Aktion: Beende Programm }
public ButtonController (A_Counter c) { myCounter = c; }}
// Die Steuerung belauscht die Knöpfe und interpretiert die Ereignisseclass ButtonController // In-Controller implements ActionListener { A_Counter myCounter; // push-Observer interpretiert Kommandos public void actionPerformed (ActionEvent event) { // Hier nur ein Grundzustand String cmd = event.getActionCommand(); if (cmd.equals("Count")) myCounter.count(); // write: Aktion auf fachlichem Modell if (cmd.equals("Reset")) myCounter.reset(); // write: Aktion auf fachlichem Modell if (cmd.equals("Exit")) System.exit(0); // Aktion: Beende Programm }
public ButtonController (A_Counter c) { myCounter = c; }}
Die Steuerung des Play-In mit dem In-Controller
► Zum Play-In wird der Controller ein Listener der View-Widgets (hier buttons)
► Die update-Methode heisst java.awt.ActionListener.actionPerformed(ActionEvent), da die Ablaufsteuerung des JDK diese sucht und aufruft
► Der Controller interpretiert die Eingaben des Benutzers und setzt sie auf das Model um(Steuerungsmaschine)
► Nutzt Entwurfsmuster State, Integerstate oder ImplicitIntegerState
![Page 95: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/95.jpg)
© P
rof.
U. A
ßm
ann
95 Softwaretechnologie (ST)
Play-In, Zähler-Beispiel: Anbindung des Controllers anmehrere Widgets des View
class CounterFrame extends JFrame { ... JPanel buttonPanel = new JPanel(); JButton countButton = new JButton("Count"); JButton resetButton = new JButton("Reset"); JButton exitButton = new JButton("Exit");
public CounterFrame (A_Counter c) { ... ButtonController bc = new ButtonController(c); // controller listens at another widget countButton.addActionListener(bc); buttonPanel.add(countButton); // controller listens at another widget resetButton.addActionListener(bc); buttonPanel.add(resetButton); // controller listens at another widget exitButton.addActionListener(bc); buttonPanel.add(exitButton); ... }}
![Page 96: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/96.jpg)
© P
rof.
U. A
ßm
ann
96 Softwaretechnologie (ST)
Alles zusammen: CounterFrame (1)
class CounterFrame extends JFrame implements Observer {JPanel valuePanel = new JPanel();JTextField valueDisplay = new JTextField(10);JPanel buttonPanel = new JPanel();JButton countButton = new JButton("Count");JButton resetButton = new JButton("Reset");JButton exitButton = new JButton("Exit");
public CounterFrame (A_Counter c) { setTitle("SwingCounter"); valuePanel.add(new JLabel("Counter value")); valuePanel.add(valueDisplay); valueDisplay.setEditable(false); valueDisplay.setText(String.valueOf(c.getValue())); getContentPane().add(valuePanel,BorderLayout.NORTH ); ButtonController bc = new ButtonController(c); countButton.addActionListener(bc); buttonPanel.add(countButton); resetButton.addActionListener(bc); buttonPanel.add(resetButton); exitButton.addActionListener(bc); buttonPanel.add(exitButton); getContentPane().add(buttonPanel,BorderLayout.SOUTH);
class CounterFrame extends JFrame implements Observer {JPanel valuePanel = new JPanel();JTextField valueDisplay = new JTextField(10);JPanel buttonPanel = new JPanel();JButton countButton = new JButton("Count");JButton resetButton = new JButton("Reset");JButton exitButton = new JButton("Exit");
public CounterFrame (A_Counter c) { setTitle("SwingCounter"); valuePanel.add(new JLabel("Counter value")); valuePanel.add(valueDisplay); valueDisplay.setEditable(false); valueDisplay.setText(String.valueOf(c.getValue())); getContentPane().add(valuePanel,BorderLayout.NORTH ); ButtonController bc = new ButtonController(c); countButton.addActionListener(bc); buttonPanel.add(countButton); resetButton.addActionListener(bc); buttonPanel.add(resetButton); exitButton.addActionListener(bc); buttonPanel.add(exitButton); getContentPane().add(buttonPanel,BorderLayout.SOUTH);
![Page 97: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/97.jpg)
© P
rof.
U. A
ßm
ann
97 Softwaretechnologie (ST)
Alles zusammen: CounterFrame (2)
addWindowListener(new WindowCloser()); c.addObserver(this); pack(); setVisible(true); } public void update (Observable o, Object arg) { A_Counter c = (A_Counter) o; valueDisplay.setText(String.valueOf(c.getValue())); }
}
class ButtonController implements ActionListener {... (wie oben) ...
}
class WindowCloser implements WindowListener { ... (wie oben) ...}
![Page 98: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/98.jpg)
Softwaretechnologie (ST) © Prof. U. Aßmann
Fakultät Informatik - Institut Software- und Multimediatechnik - Softwaretechnologie 70.A.2 Input-Controller mitKommandoobjekten
![Page 99: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/99.jpg)
© P
rof.
U. A
ßm
ann
99 Softwaretechnologie (ST)
► Der Controller kann, anstelle die Anwendungslogik direkt aufzurufen,Kommandoobjekte (Entwurfsmuster Command) erzeugen
► Vorteil: Redo, Undo, Transaktionen
Bild aus Gamma
![Page 100: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/100.jpg)
© P
rof.
U. A
ßm
ann
100 Softwaretechnologie (ST)
Zwischenschicht mit Tool-Befehlsobjekten
Graphische Benutzungsoberfläche(Fensteroberfläche mit
Widget-Hierarchie,graphical user interface, GUI)
Window
Button
Menu
Fachliches Modell(Anwendungslogik)
Unsichtbare Ablauf-
Steuerung(Ereignis-
Verwaltung)
Play-In(asynchron,push)
Play-out(synchron, abermultiple Sichtenund pull-Steuerung)
Controller-Schicht
Teambesprechung
Teammitglied
Tool- und Command-Schicht(Redo, Undo, Transaktionen)
![Page 101: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/101.jpg)
© P
rof.
U. A
ßm
ann
101 Softwaretechnologie (ST)
Zwischenschicht mit Befehlsobjekten
Graphische Benutzungsoberfläche(Fensteroberfläche mit
Widget-Hierarchie,graphical user interface, GUI)
Window
Button
Menu
Fachliches Modell(Anwendungslogik)
Unsichtbare Ablauf-
Steuerung(Ereignis-
Verwaltung)
Play-In(asynchron,push)
Play-out(synchron, abermultiple Sichtenund pull-Steuerung)
Controller-Schicht
Teambesprechung
Teammitglied
Command-Schicht(Redo, Undo, Transaktionen)
![Page 102: 70. Programmierung interaktiver Systeme mit modularen ...st.inf.tu-dresden.de/files/teaching/ss16/st/slides/70-st-programming... · P r o f. U. A ß m a n n 7 Softwaretechnologie](https://reader033.fdocument.pub/reader033/viewer/2022041623/5e40272fa5032d207b38e8b9/html5/thumbnails/102.jpg)
© P
rof.
U. A
ßm
ann
102 Softwaretechnologie (ST)
Command
run();undo();redo()
Tool
Object state;
Interpreter
Program prog;
Was sind Tools?
► Tools sind längerlebende Commands, oft mit eigener visueller Schnittstelle
► Interpreter (Automata) sind komplexe Tools, die ein Programm interpretieren, umandere Tools anzusteuern
StateMachine