Technischer Report Mensch-Maschine Schnittstelle GUI Entwicklung mit Java Swing Raimund Eder Salzburg, 8. April 2002 Fachhochschule Salzburg für angewandte Wissenschaften und Technologien Telekommunikationstechnik und -systeme Schillerstrasse 30 A-5020 Salzburg Inhaltsverzeichnis 1. Einleitung 1.1. Entwicklungsziele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2. Model-View-Controller Architektur . . . . . . . . . . . . . . . . . . . . . 1.3. Mobile Devices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 4 5 6 2. Design 2.1. Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2. Themes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3. Pluggable Look & Feel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 8 9 10 3. Programmieren mit Java Swing 3.1. Der Dialog . . . . . . . . . . 3.2. Panels und Layout Manager 3.3. Look & Feel . . . . . . . . . 3.4. Eventhandling . . . . . . . . 13 13 13 14 16 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4. Zusammenfassung 18 A. Akronyme 19 2 Abbildungsverzeichnis 1.1. Model-View-Controller Architektur . . . . . . . . . . . . . . . . . . . . . 1.2. Swing MVC Architektur . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1. 2.2. 2.3. 2.4. 2.5. Layout mit Swing - Suchen Dialog. Quelle: [Mic01a] . . Layout mit Swing - Optionen Dialog. Quelle: [Mic01a] . Java Look & Feel Schriftthema Quelle: [Mic01a] . . . . . Swing MVC Architektur am Beispiel eines Buttons . . . UIDelegate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 9 10 11 12 3.1. Minimaler Dialog im Java Look & Feel. . . . . . . . . . . . . . . . . . . . 15 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 6 1. Einleitung Der Erfolg eines Softwareproduktes ist unter anderem von der Benutzeroberfläche abhängig. Ist der Funktionsumfang auch noch so vollständig und ausgereift - von der GUI (Graphical User Interface), der Grafischen Benutzeroberfläche, hängt es ab, wie gut ein Anwender das Produkt einsetzen kann und damit auch wie hoch die Benutzerakzeptanz ist. Obwohl weit verbreitete Softwareprodukte meist ähnlichen GUI Konzepten folgen, werden nach wie vor viele Fehler beim Design des Mensch-Maschine Interfaces im Entwicklungsprozess von Software gemacht. Sun Microsystems haben im Zuge ihrer Java Offensive viel Entwicklungsarbeit investiert, um effektive GUI Entwicklung zu vereinfachen. Seit dem Software Development Kit (SDK) Java 2 Platform, Standard Edition (J2SE) 1.2 wird standardmäßig die Java Swing API - eine Bibliothek um Einfach und Platformunabhängig Benutzeroberflächen zu entwicklen - innerhalb der Java Foundation Classes (JFC) ausgeliefert. Die Swing Komponenten lösen mit dem Release der J2SE Version 1.2 das Abstract Window Toolkit (AWT) ab, das vormals für die Erstellung von grafischen Oberflächen verwendet wurde. Heute wird AWT nur noch selten verwendet, nur um Kompatibel mit älteren Java Distributionen zu bleiben. Sun empfiehlt jedoch von AWT Abstand zu nehmen, und dessen Nachfolger Swing zu verwenden, vor allem da AWT nativen Code, d. h. plattformabhängigen Programmcode, enthält und somit zu Schwierigkeiten bei der Portabilität führen kann - sogar zwischen verschiedenen Virtual Machines (VM). Besondere Aufmerksamkeit muss jedoch darauf gelegt werden eine Mischung von AWT und Swing Komponenten zu verhindern. Weiters bemüht sich Sun um konsistente und anwenderfreundliche Oberflächenkonzepte. Dazu seien vor allem die Bücher JavaT M Look and Feel Design Guidelines [Mic01a] und JavaT M Look and Feel Design Guidelines: Advanced Topics [Mic01b] zu erwähnen. 1.1. Entwicklungsziele Amy Fowler, Mitenwticklerin von Swing bei JavaSoft, beschreibt das Hauptziel der Entwicklung von Swing in [Fow98] als eine Sammlung von erweiterbaren GUI Komponenten um schneller mächtige Java Front-Ends für kommerzielle Anwendungen zu entwickeln. Daraus abgeleitet ergaben sich folgende zusätzliche Ziele: 1. Ausschließlich in Java implementiert um die Platformunabhängigkeit beizubehalten. 4 Kapitel 1. Einleitung Abbildung 1.1.: Model-View-Controller Architektur 2. Bestehend aus einer einzigen API, jedoch Unterstützung für mehrere look-andfeels. 3. Bereitstellen der Vorteile von model-driven programming ohne es in der highest-level API zu benötigen. 4. Befolgen der JavaBeans Richtlinien um die Komponenten in Entwicklungsumgebungen einbinden zu können (Visuelles GUI entwicklen). 5. Kompatibilität mit der AWT API um Vorkenntnisse zu nutzen und um Portierungen zu erleichtern. 1.2. Model-View-Controller Architektur Die Wurzeln von Swing stammen aus der model-view-controller Architektur (MVC), entwickelt für Smalltalk. Laut Steve Burbeck [Bur78] findet im MVC Paradigma eine ausdrückliche Trennung zwischen der Anwendereingabe, der Datenmodellierung und dem visuellen Feedback zum Anwender dadurch statt, dass für jede dieser Aufgaben ein spezialisiertes Objekt existiert. Abbildung 1.1 beschreibt die Aufgaben und Interaktionen der Objekte des traditionellen MVC Ansatzes. Model-View-Controller Architektur: • Das Model repräsentiert die Daten einer Applikation und definiert das Verhalten bei Befehlen und die Antworten auf Anfragen. 5 Kapitel 1. Einleitung Abbildung 1.2.: Swing MVC Architektur • Der View ist die grafische Repräsentation der Daten. • Das Controller Objekt interpretiert die Anwendereingaben und leitet Befehle an das Model oder den View weiter. Vorteile der MVC Architektur: • Mehrere Views haben Zugriff auf das selbe Model. • Einfache Entwicklung von neuen Clienttypen. Laut Amy Fowler wurde bei der Entwicklung des Prototypen bald herausgefunden, dass sich der traditionelle MVC Ansatz im praktischen Einsatz nicht verwirklichen lassen würde, und so wurde für Swing die separable model Architektur oder auch quasi-MVC Architektur eingeführt. Aus Abbildung 1.2 ist ersichtlich, dass das Konzept von Swing nur mehr sehr leicht an die traditionelle MVC Architektur angelehnt ist. Das separable model Design von Swing behandelt das model als separaten Teil - view und controller verschmelzen jedoch zur UI Delegate Klasse. Wesentlichsten Abweichungen von Swing zu MVC: • Trennung von model und Programmlogik. • Aufgaben der view/controller Komponenten können an andere Objekte vergeben werden (PL&F - siehe 2.3). 1.3. Mobile Devices Eine Ausnahmesituation im Bereich GUI Entwicklung tritt bei mobilen Geräten auf: Beschränkungen in der Displaygrösse, -auflösung und Eingabemöglichkeiten fordern dementsprechend angepasste Lösungen. Sun spezifizierte mit der Java 2, Micro Edition (J2ME), eine für mobile Geräte optimierte Java Edition. Für extrem eingeschränkte Geräte mit 16/32-Bit Mikroprozessoren 6 Kapitel 1. Einleitung oder Mikrocontrollern mit 128 - 512 KByte Speicher ist die Connected Limited Device Configuration (CLDC) empfohlen. Für mobile Geräte mit erweiterten Möglichkeiten wurde das Connected Device Configuration (CDC) spezifiziert, die auf Geräten mit 32-Bit Mikroprozessoren mit mehr als 2 MB Ram einsetzbar ist. Alle für eine J2ME Umgebung essentiellen Bestandteile (virtual machine, Klassenbibliotheken, etc.) sind in der CLDC bzw. der CDC enthalten. Für eine vollständige Java Umgebung ist jedoch noch das Mobile Information Device Profile MIDP notwendig, das die CLDC um zusätzliche Bibliotheken für Benutzeroberflächen, Datenbankzugriff und Geräte-spezifische Netzwerkfunktionen erweitert. Das MIDP bietet für die GUI Programmierung high-level und low-level APIs. Dabei ist zu beachten dass lediglich die high-level API die Portabiliät zwischen verschiedenen Geräten bieten kann. Wird die low-level API verwendet kann jedoch eine Benutzeroberläche für ein spezielles Gerät (z.B. Display) optimiert werden. Anstatt AWT oder Swing anzupassen wurde für mobile Geräte ein neues Konzept für Benutzeroberflächen erarbeitet: Oberflächen sind Anzeigen basiert (screen-based) im Gegensatz zu konventionellen Formular basierten (form-based) GUIs. Screen-based bedeutet, dass eine Anwendung aus mehreren Ansichten, besteht und jeweils nur eine davon angezeigt wird. Durch dieses Konzept werden Probleme mit dem Komponenten Layout, des Fenster-Scrollings und des Fokus-Verhaltens (aktives Fenster im Vordergrund, Inaktive im Hintergrund) umgangen. 7 2. Design Bei dem Prozess der Softwareentwicklung ist die Planungsphase der Zeitpunkt, an dem einzelne Programmteile aufeinander abgestimmt werden können, ohne übermäßige Kosten zu verursachen. Daher sollte bereits zu diesem Zeitpunkt ein Konzept für das grafische Benutzerinterface (GUI) erarbeitet werden. Dieses Kapitel gibt einen Überblick über die Planung und das Design von grafischen Benutzeroberflächen. Dabei werden laufend Beispiele anhand der Java Swing API gegeben. 2.1. Layout "Give careful consideration to the layout of components in your windows and dialog boxes. A clear and consistent layout streamlines the way users move through an application and helps them utilize its features efficiently. The best designs are aesthetically pleasing and easy to understand. mphSun Microsystems, [Mic01a] Um optisch ansprechende Dialoge zu erstellen sollte vor dem Entwickeln ein verpflichtender Styleguide erstellt werden. Der Styleguide sollte folgende Punkte enthalten: • Farben Abbildung 2.1.: Layout mit Swing - Suchen Dialog. Quelle: [Mic01a] 8 Kapitel 2. Design Abbildung 2.2.: Layout mit Swing - Optionen Dialog. Quelle: [Mic01a] • Schriftarten / Schriftgrößen • Elementgrössen • Abstände • Platzierungen / Gruppierungen • Beschriftungen (u.a. einheitliche Formulierungen) Abbildung 2.1 ist ein Beispiel für den Aufbau eines Dialoges: Anhand eines Gitternetzes werden GUI Elemente logisch angeordnet. Dabei werden thematisch zusammengehörige Elemente konsequent gruppiert (Abstand von 11 mm), und von nicht abhängigen Elementen durch grössere Abstände (17 mm) visuell getrennt. Der Optionendialog in Abbildung 2.2 ist ein weiteres anschauliches Beispiel für die konsistente Anordnung von Komponenten innerhalb eines Dialoges. Java bietet in der Swing API Hilfsmittel, die das Erstellen eines übersichtlichen Layouts erheblich vereinfachen: Layout Manager. Das Layout Managment dafür ist verwantwortlich die Größe und Position von GUI Komponenten innerhalb von Swing Containern (Fenster, Dialoge, Frames, etc.) zu bestimmen. Als Vorgabe hat jeder Container einen eigenen Layout Manager, der über alle enthaltenen Komponenten bestimmt. Detailierte Informationen über Layout Manager - deren Verwendung und Anpassungsmöglichkeiten können in [WC99] gefunden werden. Dort wird ausführlich über die Möglichkeit eingegangen selbst Layout Manager zu gestalten. 2.2. Themes Neben dem Layout sind - vor allem durch die fortschreitenden Entwicklungen von Oberlächenumgebungen - Themen von großer Bedeutung geworden. Unter einem The- 9 Kapitel 2. Design Abbildung 2.3.: Java Look & Feel Schriftthema Quelle: [Mic01a] Type Style Control Default Theme 12-point bold Small System User 10-point plain 12-point plain 12-point plain Use Buttons, checkboxes, menu titles, labels, and window titles Keyboard shortcuts in menus and tool tips Tree components and tool tips Text fields and tables Tabelle 2.1.: Java Look & Feel Schriftthema Quelle: [Mic01a] ma versteht man eine individuelle Zusammenstellung von Schriftarten, Icons, und Farbkombinationen, die nach belieben ausgewechselt werden kann. Java bietet Entwicklern ausgereifte Mechanismen um fundamentale Attribute wie Schriftarten, Schriftgrössen und Farben zu kontrollieren und dem Bedarf anzupassen. In Abbildung 2.3 und Tabelle 2.1 werden die Voreinstellungen aller Attribute des Java Themas aufgelistet. Klar Erkennbar ist, dass die Farbwahl sehr dezent gehalten ist, um den Anwender nicht zu überfordern oder abzulenken. Eigene Themen können erstellt werden, indem die vorhandenen Farbwerte überschrieben werden. Als Beispiel dient hier das Thema des Java Look & Feel (entwickelt und bekannt unter dem Codenamen Metal-Project). Da das Java Look & Feel meistens als Basis für L&F-Weiterentwicklungen dient, wird die Entwicklung dieses L&F’s von Chris Ryan ausführlich in [Rya02] beschrieben. 2.3. Pluggable Look & Feel Um Ziel Nummer 2 aus Abschnitt 1.1 (siehe Seite 5) zu erreichen, wurde die Pluggable look-and-feel architecture (PL&F) in Swing eingeführt. Diese Architektur erlaubt es Entwicklern neue Look-and-Feels zu kreieren, oder Bestehende weiterzuentwicklen. Im Allgemeinen wird empfohlen, die bestehenden L&Fs zu verwenden, da sehr weitrei- 10 Kapitel 2. Design Abbildung 2.4.: Swing MVC Architektur am Beispiel eines Buttons chend in die Java API eingegriffen werden muss, um Anpassungen vorzunehmen. Jedoch hat sich herausgestellt, dass PL&A Verwendung in den Bereichen corporate identity und behindertengerechte Interfaces findet. Standardmässig sind folgende Look & Feels in Java integriert: • Java-Style (auch Metal-Style) • Motif-Style (dem Motif GUI Toolkit aus der UNIX Welt nachempfunden) • Windows-Style (Microsoft Windows ähnlicher Stil, nur auf MS Betriebssystemen vorhanden) • MacOS-Style (Apple MacOS angepasster Stil, nur auf Mac Betriebssystemen vorhanden) Dadurch können Anwendungen entwickelt werden, die sich automatisch ihrer Umgebung anpassen, je nach Betriebssystem wird das entsprechende Look & Feel per Voreinstellung geladen. Abbildung 2.4 zeigt wie PL&F programmiertechnisch realisiert sind: für das Rendern (= zeichnen der GUI Elemente), ist ein Delegate, abgeleitet von ComponentUI, zuständig. Abbildung 2.5 zeigt den internen Aufbau von Swing GUI Komponenten. Für Details zum Erstellen von eigenen Look & Feels sei hier auf das Package javax.swing.plaf in der Swing JFC Bibliothek verwiesen. Das Paket javax.swing.plaf enthält die Schnittstellen für die Pluggable Look & Feels (PLAF). Ralph Kar, Entwickler bei Swing und nun SAP Mitarbeiter, beschreibt in [Kar02] detailiert, den Weg um ein eigenes Look & Feel zu kreieren - Anschaulich am Beispiel von SAP’S SCE L&F. 11 Kapitel 2. Design Abbildung 2.5.: UIDelegate 12 3. Programmieren mit Java Swing Obwohl Java Swing GUIs (Graphical User Interface) einfach und strukturiert per Java Code erzeugt werden können, gibt es eine große Anzahl an Entwicklungsumgebungen, mit denen visuell grafische Oberflächen gestaltet werden können. Auswahl an etabliertem Java Entwicklungsumgebungen • Borland JBuilder www.borland.com • Webgain Visual Cafe www.webgain.com • NetBeans1 www.netbeans.org • Sun Forte for Java www.sun.com/forte/ffj • IBM VisualAge for Java www.ibm.com/software/ad/vajava Das folgende Kapitel gibt einen Einblick in die klassische GUI Entwicklung ohne Unterstützung eines Designers. Für eine detailiertere Einführung wird hier auf Trail: Creating a GUI with JFC/Swing (aka The Swing Tutorial) [WC99] verwiesen 3.1. Der Dialog Dialoge in Swing sind abgeleitet von JDialog oder einer davon abgeleiteten Klasse (Applets als Ausnahme stammen von JApplet ab). Listing 3.1 zeigt das Code-Skelett eines Dialogs ohne Funktion. Um den Dialog anzuzeigen muss eine Instanz des Dialogs mit Dialog d = new Dialog() wie in Listing 3.2 erzeugt werden. Diese Instanz kann anschließend mit d.show() angezeigt werden. 3.2. Panels und Layout Manager Listing 3.3 enthält bereits Anweisungen für das Einfügen eines Panels, der später GUI Elemente enthält, und einen Layout-Manager. Wie dieser Dialog aussehen würde ist aus Abbilding 3.1 ersichtlich. Panels sind wichtige Bestandteile von Swing Oberflächen, erlauben sie doch dem Programmierer die Zusammenfassung von Komponenten, und 1 frei verfügbar 13 Kapitel 3. Programmieren mit Java Swing Listing 3.1: Minimaler Dialog 1 package SampleDialog; 2 3 4 import java.awt.∗; import javax.swing.∗; // Includieren der Swing−Klassen 5 6 public class Dialog extends JDialog { 7 public Dialog(Frame frame, String title , boolean modal) { super(frame, title , modal); } 8 9 10 11 public Dialog () { this(null , "" , false ); } 12 13 14 15 } Listing 3.2: Instanzieren und Anzeigen eines Dialogs 1 2 3 4 5 6 public class Application { public static void main(String[] args ) { Dialog d = new Dialog(); d.show(); } } deren Wiederverwertung als Einheit. Ein Panel ist - genauso wir ScrollPanes, TabbedPanes, etc - ein Container, der andere Swing Elemente beinhalten kann. Ein solcher Container kann wiederum einen oder mehrere Container beinhalten und ist ein wichtiger Bestandteil der flexiblen Swing Architektur. Weiters ist es möglich jedem Container einen Layout Manager zuzuweisen, der zur Laufzeit die GUI Elemente optimal anpasst (Layout, Scaling, Spacing). Diese Funktion ist wichtig für die von Java repräsentierte Platformunabhängigkeit, da sich nicht nur die technischen Vorraussetzungen von einer Platform zur Anderen ändern, sondern auch die Anzeigeneigenschaften. Wird einem Container kein Layout Manager zugewiesen, so kann klassischerweise das Layout mittels XY Koordinaten, sowie Höhe und Breite gestaltet werden. Dieses Verfahren wird absolute Positionierung genannt. Dadurch können bereits skizzierte Konzepte auf den Pixel genau gesetzt werden. Nachträglich kann dies auch durch panel.setLayout(null) erreicht werden. 3.3. Look & Feel Global kann für jede Instanz einer Java Virtual Machine, und all in dieser VM laufenden Applikationen das Look & Feel mit Hilfe des UIManager ausgewählt werden. In Listing 3.4 Zeile 3 wird das zum aktuellen Betriebssystem gehörige L&F ausgewählt. Zeile 4 würde das auf jeder Platform in gleicher Weise vorhandene Java Look & Feel 14 Kapitel 3. Programmieren mit Java Swing Listing 3.3: Erweiterter Dialog 1 package SampleDialog; 2 3 4 import java.awt.∗; import javax.swing.∗; 5 6 7 8 public class Dialog extends JDialog { JPanel panel = new JPanel(); BorderLayout borderLayout = new BorderLayout(); 9 public Dialog(Frame frame, String title , boolean modal) { super(frame, title , modal); try { panel.setLayout(borderLayout); getContentPane().add(panel); pack(); } catch(Exception ex) { ex.printStackTrace (); } } 10 11 12 13 14 15 16 17 18 19 20 21 public Dialog () { this(null , "" , false ); } 22 23 24 25 } Abbildung 3.1.: Minimaler Dialog im Java Look & Feel. 15 Kapitel 3. Programmieren mit Java Swing Listing 3.4: Auswählen des Look & Feel 1 2 3 4 5 6 public static void main(String[] args ) { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()); UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); } catch ( Exception e ) { } 7 Dialog d = new Dialog(); d.show(); 8 9 10 } Listing 3.5: Auswählen des Look & Feel UIManager.setLookAndFeel(/∗ L&F Name ∗/); SwingUtilities . updateComponentTreeUI(frame); frame.pack(); 1 2 3 wählen. Das Beispiel in Zeile 5 verdeutlich schließlich, wie direkt per L&F-Name ein Profil ausgewählt wird. Das Auswählen eines L&F ist nicht notwendig. Der UIManager verwendet den SystemDefault zum Rendern der GUI Elemente. Swing bietet ausserdem die Möglichkeit L&Fs während des Applikationslaufes (at runtime) auszutasuchen. Um diese Funktion zu nutzen, sind lediglich die drei Schritte, aufgeführt in Listing 3.5, zu implementieren. Dadurch kann der Endanwender mittels eines persönlichen Profiles auch Einfluss in die Applikationsoptik nehmen. 3.4. Eventhandling Grafische Oberflächen ermöglichen eine Interaktion zwischen Mensch und Maschine. Bisher wurde lediglich eine Richtung dieses Prozesses behandelt: Maschine → Mensch. Durch das Konzept der Ereignisbehandlung (Eventhandling) wird erst wirkliche Interaktion möglich gemacht. Jedesmal, wenn ein Anwender Tasten drückt oder mit der Maus klickt, wird ein Ereignis (Event) ausgelöst. Jedes Objekt kann über das ausgelöste Ereignis benachrichtigt werden. Vorraussetzung dafür: das Objekt muss ein bestimmtes Interface implementieren und als ein Ereignis-Empfänger (event listener) für dieses Ereignis registriert sein. Tabelle 3.1 gibt eine Übersicht über mögliche Ereignisse, deren Typ 2 und welches Interface der Empfänger implementieren muss, um an diesem Ereignis registriert zu werden. Tritt nun ein Ereignis auf, wird an den Event Listener eine Nachricht mit Informationen über das aufgetretene Ereignis und Informationen über die Quelle (Sender) des 2 genauere Informationen zu Event Typen: http://java.sun.com/docs/books/tutorial/ uiswing/components/jcomponent.html#eventapi 16 Kapitel 3. Programmieren mit Java Swing Act that results in the event User clicks a button, presses Return while typing in a text field, or chooses a menu item User closes a frame (main window) User presses a mouse button while the cursor is over a component User moves the mouse over a component Component becomes visible Component gets the keyboard focus Table or list selection changes Listener type ActionListener WindowListener MouseListener MouseMotionListener ComponentListener FocusListener ListSelectionListener Tabelle 3.1.: Java Swing Events. Quelle: [WC99] Listing 3.6: Registrieren eines Listeners an einem Event 1 2 3 4 5 button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit (0); } }); Ereignisses gesandt. Mehrere Objekte können sich an einem Ereignis registrieren - es werden dann Nachrichten an alle Abonnenten versendet. Listing 3.6 zeigt eine einfache Ereignisbehandlung. Dabei wird an einem Button ein neuer Event Listener registriert. In diesem Beispiel wird die gebräuchliche Methode dafür verwendet: eine anonymisierte Klasse. Dabei wird in Zeile 1 eine neue Instanz der Klasse ActionListener erzeugt. Gleichzeitig dazu wird aber die Methode actionPerformed der Klasse in den Zeilen 2-4 überschrieben. Da dies praktisch zu einer neuen Klasse führt, diese aber nicht explizit mit neuem Klassennamen deklariert worden ist spricht man von einer anonymisierten Klasse. Für eine genauere Beschreibung der Ereignisbehandlung sei an dieser Stelle wieder an [WC99] verwiesen. 17 4. Zusammenfassung Es ist schwer ein komplexes Thema wie GUI Entwicklung mit Java Swing auf wenigen Seiten zu erörtern. Und doch sind hier die grundlegenden Themen behandelt, die notwendig sind, um Swing Oberflächen zu programmieren: • Architektur von Java Swing • Design und Layout • Praktischer Aufbau von Dialogen • Behandlung von Ereignissen Swing ist eine durchgängig strukturierte Möglichkeit, um grafische Oberflächen zu gestalten. Dabei bietet Sun sehr viel Literatur im Internet an, und macht es Anfängern for allem durch das Swing Tutorial [WC99] einfach einen Einstieg zu finden. Auch die JavaT M Look and Feel Design Guidelines [Mic01a] [Mic01b], sind sehr Hilfreich, wenn es um die Kreation von komplexeren grafischen Oberflächen geht, oder wenn umfangreicheren Applikationen ein durchgängiges Aussehen gegeben soll. Zu beachten ist, dass bei komplexen Anwendungen nicht nur eine Logik auf Datenebene existiert, sondern dass auch die Darstellungsebene eine eigene, unter Umständen sehr komplexe, Logik besitzt. Daher ist es von Vorteil, wenn versucht wird bei komplexen GUI Anwendungen nach der Model-View-Controller Architektur vorzugehen - die eine Trennung zwischen der Darstellungsebene (View) und der Datenebene (Model) vorsieht und eine Art Vermittlungsschicht einführt. In J2EE Design Patterns > Model-ViewController Architecture [Mic02] gibt Sun wertvolle Ratschläge bei dem mehrschichtigen Applikationsdesign. 18 A. Akronyme API Application Programmer’s Interface AWT Abstract Window Toolkit CDC Connected Device Configuration CLDC Connected Limited Device Configuration GUI Graphical User Interface J2EE Java 2 Platform, Enterprise Edition J2ME Java 2 Platform, Micro Edition J2SE Java 2 Platform, Standard Edition JFC Java Foundation Classes L&A Look-and-feel MIDP Mobile Information Device Profile MVC Model-View-Controller Architektur PL&A Pluggable look-and-feel architecture SDK Software Development Kit UI User Interface 19 Literaturverzeichnis Die Literaturangaben sind alphabetisch nach den Namen der Autoren sortiert. Bei mehreren Autoren wird nach dem ersten Autor sortiert. [Bur78] Steve Burbeck. Applications programming in smalltalk-80: How to use modelview-controller (mvc). 1978. http://st-www.cs.uiuc.edu/users/smarch/ st-docs/mvc.html. [Fow98] Amy Fowler. A swing architecture overview. The Swing Connection, 1998. http: //java.sun.com/products/jfc/tsc/articles/architecture. [Kar02] Ralph Kar. Creating a custom look and feel. The Swing Connection, 2002. http: //java.sun.com/products/jfc/tsc/articles/sce. [Mic01a] Sun Microsystems. JavaT M Look and Feel Design Guidelines. Sun Microsystems, Inc, 1st edition, Februar 2001. http://java.sun.com/products/jlf/ed2/book. [Mic01b] Sun Microsystems. JavaT M Look and Feel Design Guidelines: Advanced Topics. Sun Microsystems, Inc, 2nd edition, Dezember 2001. [Mic02] Sun Microsystems. Model-view-controller architecture (mvc). 2002. http: //java.sun.com/blueprints/patterns/j2ee_patterns/model_view_ controller/. [Rya02] Chris Ryan. Creating the java pl&f: The projectmetal report. The Swing Connection, 2002. http://java.sun.com/products/jfc/tsc/articles/ jlf-metal-report. [WC99] Kathy Walrath and Mary Campione. The JFC Swing Tutorial: A Guide to Constructing GUIs. Addison-Wesley Pub, July 1999. http://java.sun.com/docs/books/ tutorial/uiswing. 20