Java Schulung - GUI
24. – 28. September 2007 (Mittwoch)
GUI-Programmierung mit Java
AWT (Advanced Windowing Toolkit)
Erstes Grafikframework für Java
Bestandteil der Java API
Elemente: Frame, Panel, Canvas, Label...
Schwergewichtige Umsetzung mit original Betriebsystemkomponenten
(kleinster gemeinsamer Nenner)
Swing
Erweitert AWT, seit Java 2SE in JFC (1998)
Neue Features: Drag&Drop, Look&Feel, ToolTips, DoubleBuffering,
Leichtgewichtige Umsetzung: Alle Elemente werden von Java gerendert
Sehr Plattformunabhängig, aber “ungewohnter “ Look&Feel
SWT (Standard Widget Toolkit)
Wieder Schwergewichtig..(nativ+nachgebaut)
Vorteile: Origärer, Schneller
Nachteile: Plattformabängigkeit, Unterschiede zwischen Plattformenim
Detail, Speicherverwaltung, Kein MVC (schwerer zu handhaben)
GUI-Programmierung mit Java
JFace
Erweitert SWT, objektorientierter als SWT
Ergänzt SWT um ModelViewControler Ansatz
Vereinfacht die Nutzung von SWT
Zusätzliche Bibliotheken aus Eclipe benötigt (1,4 auf 2,8 MB)
RCP (Rich Client Platform)
Basis-Eclipse als Framework für eigene Anwendungen
Modulare Anwendungsarchitektur (Plugins)
Mehr Bibliotheken, steile Lernkurve
Noch größer.. OSGi-Runtime+SWT+Jface+UI (4,8 MB)
ADI (ACX)
Setzt auf JFace+SWT auf..
Was wird benötigt ?
Notwendige Dateien
[Link] - enthält die Abstraktionsschicht
[Link] – Plattformspezifischer Code
Hinzufügen:
Eintragen des SWT in den Classpath des Projektes
Attach Source: „[Link]“
Ein Minimales GUI-Programm
Was war neu ?
Klasse „Display“ (GUI-Prozess)
Ein Display je Thread
Verbindungsglied zum Betriebssystem
Abfrage von System-Eigenschaften (getSystemFont,
getDoubleKlickTime())
Erzeugt Events, Events können auch gepostet werden
Klasse „Shell“ (Fenster)
Eine Shell je Fenster auf dem Desktop
Typen: TopLevel-Shell (bekommt ein Display),
Dialog-Shell (bekommt die Parent-Shell)
Message-Loop!
Wir fügen Widgets hinzu! ([Link])
SWT – Fensterkomposition aus Widgets
Display
Shell
Composite Widget Widget
Widget Widget Widget
Komplexes Fenster Setzt sich hierarchisch aus Widgets zusammen!
SWT-Widgets
Browser Buttons (Verschiedene Styles)
Canvas Combo Composite
Coolbar CTabFolder DateTime
SWT-Widgets II
Link
Group Label
Shell
ExpandBar
ProgressBar
Slider Sash
List Menu
Scale Spinner
Styled Text
ScrolledComposite
SWT Widgets III
Text
TabFolder Table
ToolBar
Tray
Tree
Widget - Vererbungsirarchie
Unser nächstes Ziel (Hinzufügen einer Tabelle)
Tabelle Teil II
Unser nächstes Ziel: Eine Menubar
Erzeugung des Menüs Einfügen in createGUI()
Nächster Wunsch - Buttons
Anordnung in einem Grid, Resizeverhalten!!
Ein GridLayout
Layout ändern:
Tabelle über zwei Spalten ausdehnen:
Hinzufügen der Buttons und Aktionen
Neue Telefonummern hinzufügen
Eigenes Composite
QuellCode für eigenes Composite
Composite integrieren
Hinzufügen in CreateGUI
Anpassen der Aktion des New-Buttons
Widgets und Composites
Erzeugen von Widgets
Parent wird übergeben, Stil-konstante (siehe Button)
Keine add-Methode (Parent beim Erzeugen übergeben)
Composites
Shell ist ein wichtiges Composite-Beispiel
Anordnung von inneren Widgets über Layouts (FillLayout,
RowLayout, GridLayout,..) oder absolute Platzierung mit
setBounds()
Man kann eigene Composite-Widgets erzeugen
(Wiederverwertbarkeit, Strukturierung)
Eine Sicherheitsabfrage
Noch mehr festdefinierte Dialoge
Plattformdialoge für
Message Box
Farbauswahl (ColorDialog)
Datei / Orderwahl
Drucken
Fontauswahl
Bemerkungen
Speicherverwaltung
Speicherverwaltung durch Benutzer (rekursives dispose..,
Benutzung nach dispose fehlerhaft)
Dünne Kapselung in SWT:
Daten (hier Telefonnummern) werden nur im Plattform-
spezifischem Widget gespeichert
In unserem Beispiel stark verwoben.
„Was ist wenn die selben Daten in mehren Fenstern angezeigt
werden sollen“
Alternatives Designs:
Schichtenarchitekturen (GUI/Modell/Daten)
Model View Controler-Ansatz
Model View Architektur
Grundlegende Idee der Schichtenarchitektur
Trennung von Modell (Anwendungslogik/ Fachkonzept)
und Darstellung
Modell kennt Oberfläche nicht, stellt Ihr aber Daten bereit
Zwei Realisierungsansätze
Polling:
Benutzeroberfläce fragt regelmäßig nach Änderungen
Nachteile: Langsame Reaktionen
Indirekte Kommunikation:
GUI „abboniert“ Änderungsnachrichten.
Registriert sich als „Observer“ und holt sich Daten bei
Änderungsnachricht.
Model View Controler
Schreiben Sie eine GUI für die Raumbelegung
Eingabe der Daten, Darstellung der
Mitarbeiter in einer Liste (Buttons „New“
und „Delete“
Start der Zuordnung, Ausgabe der
Ergebnisse
Laden und Speichern der Eingabe-
Daten+Zuordnung.
Danke für Ihr Interesse …