Swing bietet eine Vielzahl an neuen Benutzeroberflächen-Komponenten, die die Entwicklung von Applets und Anwendungen erleichtern sollen (Siehe Swing-Komponenten auf Seite 465.). Eine der wichtigsten Eigenschaften von Swing ist das Pluggable Look and Feel (PL&F). Diese Eigenschaft erlaubt es dem Entwickler, das Aussehen und die Bedienung eines Programms (Applets) zu bestimmen und ist außerdem einer der großen Unterschiede zu den gängigen AWT-Komponenten, da ein Java-Programm mit einer Benutzeroberfläche im Stil des zugrunde liegenden Betriebssystems erstellt werden kann (siehe bspw. Abb. 8-2). Die wichtigsten Eigenschaften von Swing sind nachfolgend erläutert. Lightweight-Eigenschaften von Swing-Komponenten Unter der Lightweight-Eigenschaft versteht man, dass Swing-Komponenten keiner plattformabhängigen Implementierung der Oberfläche unterliegen AWT-Komponenten benutzen im Gegensatz dazu den sog. Peer-Code. Die Verwendung von Swing ist dementsprechend gegenüber AWT-Komponenten, die als Heavyweight-Komponenten bezeichnet werden, effizienter, da weniger Systemressourcen in Anspruch genommen werden. Unterstützung von Tastatur-Mnemoniks durch Swing Tastatur-Mnemoniks sind Teil der Accessibility-API, die durch Swing unterstützt wird. Sie stellen eine Möglichkeit dar, ein Programm ohne Maus zu bedienen. Die Verwendung von Tastatur-Mnemoniks unterscheidet sich je nach Art der verwendeten Plattform. So wird unter Windows 95, Windows 98 oder Windows NT durch die Kombination der ALT-Taste mit einem entsprechenden Buchstaben ein Mnemonik erzeugt. Im Folgenden wird ein JButton-Objekt durch den Buchstaben R mit einer Schaltfläche verknüpft: String buttonLabel = "Rücksetzen"; JButton resetButton = new JButton(buttonLabel); //Verknuepfung des Button mit dem Buchstaben R resetButton.setMnemonic('R'); Als Alternative kann das JButton-Objekt mit dem ersten Buchstaben eines Labels verknüpft werden, womit eine mögliche Internationalisierung des Programms unterstützt werden kann. resetButton.setMnemonic(buttonLabel.charAt(0)); Das Anklicken der Schaltfläche entspricht nun dem Drücken der Tastenkombination ALT+R. Swing-Komponenten und ToolTips ToolTips werden dazu verwendet, den Zweck der verwendeten Komponenten zu beschreiben. ToolTips sind kleine Textblöcke, die angezeigt werden, wenn der Mauszeiger einige Sekunden über einer Komponente verweilt.Die Verknüpfung von ToolTips mit Swing-Komponenten stellt eine weitere Möglichkeit dar, Java-Programme benutzerfreundlich zu gestalten. ToolTips werden mit der Methode setToolTipText(String theText) gesetzt. Der anzuzeigende Text ist hierbei auf eine Zeile beschränkt und sollte eine knappe Funktionsbeschreibung einer Komponente geben. Die folgende Zeile setzt die entsprechende Beschreibung für den oben verwendeten resetButton: resetButton.setToolTipText("Wert zuruecksetzen"); Abb. 8.6: Verwendung von ToolTips Look and Feel-Unterstützung in Swing Ein Swing-Programm erlaubt es, eine Benutzeroberfläche auf allen Plattformen einheitlich oder je nach Betriebssystem unterschiedlich darzustellen. Wie in Kapitel 8 beschrieben wird, ist das Look and Feel der Benutzeroberfläche der AWT-Komponenten abhängig von der Betriebssystemumgebung, in der die Java-VM arbeitet, da die AWT-Komponenten auf entsprechende Komponenten des Betriebssystems abgebildet werden. Bei Swing ist dies nur bei den äußeren Container-Klassen der Fall (JWindow, JFrame, JDialog, und JApplet). Alle anderen Bestandteile von Swing sind vollständig in Java implementiert. Dadurch ist die Bindung des Look and Feels an die Umgebung nicht mehr gegeben. Entsprechend ist es auch möglich, unabhängig von der Plattform unter mehreren Look and Feels zu wählen. Für den Programmierer spielt die Wahl des Look and Feels keine wesentliche Rolle, da sie völlig transparent ist und keinen Einfluss auf die eigentliche Funktionalität der Komponenten hat. Die Wahl des Look and Feels kann dem Benutzer überlassen werden, da es möglich ist, dieses zur Laufzeit des Programms umzuschalten. Die dazugehörigen Methoden finden sich in der Klasse UIManager (siehe auch Kapitel 8.1). Standardmäßig stehen in der Swing-Version 1.1 (JDK 1.2) folgende Pluggable look and Feel-Implementierungen (PL&F) zur Verfügung: Dubbed Metal: Das plattformunabhängige Look-and-Feel von Swing. Motif: Für Solaris und Linux. Win32: Für Windows 95, Windows 98 und Windows NT. Swing bietet auch die Möglichkeit, eigene Look and Feels zu entwickeln und sie entsprechend mit beliebigen Swing-Komponenten zu benutzen. Dazu wird das Package javax.swing.plaf verwendet, das jeder Swing-Komponente eine abstrakte Klasse zuordnet, wie bspw. PopupMenuUI, ProgressBarUI oder ScrollBarUI. Um ein neues Look and Feel zu entwickeln, werden von diesen Klassen eigene UI-Klassen für alle Komponenten abgeleitet. MacIntosh: Das Look and Feel für MacIntosh-Systeme ist in Swing zwar vorhanden, sollte allerdings separat geladen werden. Abb. 8.7: Die verschiedenen Look and Feel-Einstellungsmöglichkeiten Die oben erwähnte Möglichkeit, das Look and Feel sogar zur Laufzeit umzuschalten, wird nachfolgend verdeutlicht. Vernachlässigt man vorerst die Behandlung der möglichen Ausnahmen (Exceptions), so besteht der hierfür notwendige Code nur aus den folgenden drei Zeilen: UIManager.setLookAndFeel ("javax.swing.plaf.metal.MetalLookAndFeel"); SwingUtilities.updateComponentTreeUI(this); pack(); In der ersten der drei Zeilen wird das Metal Look and Feel aktiviert. Im nächsten Schritt muss dafür gesorgt werden, dass alle Komponenten entsprechend des neuen Look and Feels neu gezeichnet werden. Um nicht für jede einzelne Komponente die Methode updateUI() aufrufen zu müssen, wird hier eine statische Methode der Klasse SwingUtilities benutzt, die diesen Vorgang automatisiert. Schließlich muss das Fenster an das eventuell veränderte Layout angepasst werden. Standarddialogfenster in Swing Unter Standarddialogfenstern versteht man kleine Fenster, die kurze Meldungen anzeigen, den Benutzer warnen oder ihm Fragen stellen. Diese Fenster sind ein effizientes Hilfsmittel, um mit dem Benutzer zu kommunizieren. Swing bietet vier Klassen für die Arbeit mit Dialogen an. Die Klasse JDialog ist das Swing-Gegenstück zur Klasse Dialog des AWTs und kann zusätzlich zu den üblichen Swing-Eigenschaften dieser Klasse ebenso benutzt werden, um eigene Dialoge zu implementieren. Hierbei entsteht kein zusätzlicher Aufwand dadurch, dass neue Klassen und Event-Adapter geschrieben werden müssen. Bei der Implementierung leitet man eine Klasse von JDialog ab, die dann die gewünschte Funktionalität bietet. Viele Standarddialoge können jedoch auf einfachere Art und Weise erzeugt werden, indem man die statischen Methoden der Klasse JOptionPane des Packages javax.swing aufruft. Folgende Dialogfenster werden angeboten: MessageDialog : Ein Dialogfenster, das eine Meldung anzeigt. InputDialog: Ein Dialogfenster, das zur Eingabe von Text auffordert. ConfirmDialog: Ein Dialogfenster, das eine Frage stellt und die Schaltflächen Ja, Nein und Abbrechen bietet, damit der Benutzer entsprechend antworten kann. OptionDialog: Ein Dialogfenster, das die oben genannten drei Arten von Dialogfenstern kombiniert. Um bspw. eine Nachricht anzuzeigen, die vom Benutzer bestätigt werden soll, genügt die Zeile: JOptionPane.showMessageDialog(this, "Fragen an: openjava@kom.tu-darmstadt.de"); Abb. 8.8: Einfacher Message-Dialog Eine beliebige Eingabe-Aufforderung kann wie folgt implementiert werden: String inputValue = JOptionPane.showInputDialog("Tragen Sie einen Wert ein."); Dabei bieten die vorgefertigten Dialoge eine Auswahl an fertigen Icons und Button-Texten für verschiedene Zwecke, bspw. Warnungen, Fehler, Informationen, aber auch Fragen. Das Anwendungsbeispiel (siehe Kapitel 8.8) demonstriert unter anderem auch die Benutzung der verschiedenen Dialoge.