Swing ist Bestandteil der Java Foundation Classes (JFC) und stellt eine Sammlung von Klassen zur Entwicklung von Benutzeroberflächen dar. Swing basiert auf dem in JDK 1.1 eingeführten Event-Modell und wird seit der Version 1.2 des JDKs standardmäßig mitgeliefert. Im Gegensatz zu dem in Kapitel 4.4 betrachteten AWT, bei dem die Komponenten auf entsprechende GUI-Elemente der Plattform abgebildet werden, auf der das Programm läuft, sind mit einigen wenigen Ausnahmen alle Bestandteile von Swing vollständig in Java programmiert. Das Benutzen von Oberflächenelementen des zugrunde liegenden Betriebssystems ermöglicht eine einfache Portierung des AWTs auf verschiedene Plattformen. Gleichzeitig sind aber die Möglichkeiten des AWTs stark begrenzt, weil sie dem kleinsten gemeinsamen Nenner zwischen den verschiedenen grafischen Benutzeroberflächen (Graphical User Interface, GUIs) der verschiedenen Betriebssysteme entsprechen müssen, um keines dieser Betriebssysteme zu benachteiligen. Aus diesen Gründen sahen vor Java 1.2 Applets und Programme auf verschiedenen Plattformen unterschiedlich aus. Ein Applet bzw. Programm musste sogar auf verschiedenen Plattformen getestet werden, wobei diverse Layout-Manager berücksichtigt werden mussten, um eine plattformübergreifende Benutzeroberfläche zu entwikkeln. Um diese Problematik zu verdeutlichen, ist nachfolgend ein Beispiel angegeben, das die Ausgabe derselben Anwendung auf einem UNIX-Betriebssystem (Abb. 8-1) und auf einem Rechner unter Windows NT (Abb. 8-2) darstellt. Das Programm wurde unter Windows NT implementiert. Um Java-Programme mit einer einheitlichen Benutzeroberfläche auf allen Plattformen zu ermöglichen, begannen die Firmen JavaSoft und Netscape, ein rein in Java geschriebenes Application Programming Interface (API) zu entwickeln. Dieses API bekam den Namen Swing und ist vom bisherigen AWT und dessen Funktionsweise unabhängig. Durch Swing müssen das zugrunde liegende System und dessen GUI-Elemente bei der Entwicklung von grafischen Benutzeroberflächen nicht berücksichtigt werden. Nur bei der Erstellung des Hauptfensters wird auf die Peer-Technik des alten AWTs zurückgegriffen. Abb. 8.1: Darstellung einer unter Windows NT entwickelten AWT-Anwendung unter Linux. Abb. 8.2: Darstellung einer unter Windows NT entwickelten AWT-Anwendung unter Windows. Swing unterscheidet sich dementsprechend vom AWT in vielen Punkten, ermöglicht es aber dennoch, bestehende Anwendungen leicht anzupassen, wobei die gleichzeitige Verwendung von AWT-Komponenten erlaubt ist. Dabei beinhaltet Swing eigene Gegenstücke zu allen AWT-Komponenten und bietet darüber hinaus viele weitere neue Komponenten. Zu den wichtigsten Vorteilen von Swing gegenüber AWT gehören die Model-View-Controller-Architektur, die bessere Erweiterbarkeit und die Plattformunabhängigkeit. Swing ist ein Bestandteil der Java Foundation Classes (JFC, siehe Abb. 8-3). Die JFC besteht aus fünf APIs: AWT, Swing, Java2D, Drag & Drop und Java Accessibility. Das API Java Accessibility enthält Klassen mit Funktionen, die insbesondere Schwerbehinderte beim Zugriff auf Java-Programme unterstützen. Klassen für 2-D-Graphiken sind ebenso Teil der JFC wie ein API zur Realisierung von plattformübergreifenden Drag & Drop-Fähigkeiten innerhalb von Java-Anwendungen, wie auch zwischen Java und Anwendungen von native Code. Abb. 8.3: JFC, Swing und AWT In diesem Kapitel wird die Swing-Architektur näher betrachtet. Weiterhin wird der Unterschied zwischen SWING und AWT erläutert. Anschließend wird dem Leser der Umgang mit den Swing-Komponenten anhand eines Anwendungsbeispieles verdeutlicht. Architektur der Swing-Komponenten Eigenschaften von Swing Swing-Komponenten Layout-Manager Bidirektionale Swing-Elemente Event Handling Kompatibilität mit dem AWT Anwendungsbeispiel Zusammenfassung