From 33613a85afc4b1481367fbe92a17ee59c240250b Mon Sep 17 00:00:00 2001 From: Sven Eisenhauer Date: Fri, 10 Nov 2023 15:11:48 +0100 Subject: add new repo --- .../hjp5/html/k100229.html | 340 +++++++++++++++++++++ 1 file changed, 340 insertions(+) create mode 100644 Master/Reference Architectures and Patterns/hjp5/html/k100229.html (limited to 'Master/Reference Architectures and Patterns/hjp5/html/k100229.html') diff --git a/Master/Reference Architectures and Patterns/hjp5/html/k100229.html b/Master/Reference Architectures and Patterns/hjp5/html/k100229.html new file mode 100644 index 0000000..be2304e --- /dev/null +++ b/Master/Reference Architectures and Patterns/hjp5/html/k100229.html @@ -0,0 +1,340 @@ + + + +Handbuch der Java-Programmierung, 5. Auflage + + + + + + + + + +
 Titel  + Inhalt  + Suchen  + Index  + DOC  +Handbuch der Java-Programmierung, 5. Auflage +
 <<  +  <   +  >   + >>  + API  +Kapitel 35 - Swing: Grundlagen +
+
+ + + + +

35.1 Eigenschaften und Architektur von Swing

+
+ +
+ + + + +

35.1.1 Einleitung

+ +

+Bereits kurze Zeit nachdem mit dem JDK 1.0 das Abstract Windowing +Toolkit eingeführt wurde, begannen die Entwickler bei SUN, über +Möglichkeiten nachzudenken, die grafische Oberfläche von +Java-Anwendungen zu verbessern. Als nachteilig sahen sie vor allem +folgende Eigenschaften des AWT an: +

+ +

+Erklärtes Ziel der JDK-Entwickler war es, diese Nachteile zu +beseitigen und mit der Entwicklung der Java Foundation Classes +(deren wichtigster Bestandteil die als Swing +bezeichnete Sammlung grafischer Dialogelemente werden sollte) eine +echte Alternative zum AWT zu schaffen. + + + + +

35.1.2 Eigenschaften von Swing

+ + + + +

Leichtgewichtige Komponenten

+ +

+Im Gegensatz zum AWT benutzen Swing-Komponenten nur noch in sehr eingeschränkter +Weise plattformspezifische GUI-Ressourcen. Abgesehen von Top-Level-Fenstern, +Dialogen und grafischen Primitivoperationen werden alle GUI-Elemente +von Swing selbst erzeugt. Ein Swing-Button unter Windows wird nicht +mehr vom Windows-UI-Manager dargestellt, sondern von Swing selbst +gezeichnet. + +

+Diese Vorgehensweise bietet einige Vorteile: +

+ +

+Der Grundstein für Komponenten, die von Java selbst erzeugt und +dargestellt werden können, wurde im JDK 1.1 mit der Einführung +der Lightweight Components (»leichtgewichtige« +Komponenten) gelegt. Dabei wird die paint-Methode +eines Component-Objects +nicht mehr an die betriebssystemspezifische Klasse weitergeleitet, +sondern in den Komponentenklassen überlagert und mit Hilfe grafischer +Primitivoperationen selbst implementiert. Die im AWT vorhandenen Dialogelemente +werden im Gegensatz dazu als Heavyweight Components +bezeichnet (»schwergewichtige« Komponenten). + +

+Mit Hilfe der leichtgewichtigen Komponenten, die für alle Aspekte +der Darstellung selbst verantwortlich sind, konnten einige interessante +Features realisiert werden. So können beispielsweise zu allen +Komponenten Tooltips erzeugt werden +(also kleine Hilfetexte, die über der Komponente beim Verweilen +mit der Maus angezeigt werden), ohne dass dazu Unterstützung +seitens des zugrunde liegenden Grafikbetriebssystems erforderlich +wäre. + +

+Eine andere Eigenschaft, die nur mit Hilfe leichtgewichtiger Komponenten +realisiert werden konnte, wird als Debug-Grafik +bezeichnet. Dabei wird der Darstellungsvorgang beim Zeichnen der Komponente +künstlich so verlangsamt, dass er wie in einer Zeitlupeneinstellung +Schritt für Schritt verfolgt werden kann. Das ist insbesondere +während der Entwicklung eigener Komponenten nützlich, um +den Bildaufbau studieren und auf Fehler hin untersuchen zu können. + + + + +

Pluggable Look-and-Feel

+ +

+Die Swing-Entwickler gingen aber noch einen Schritt weiter. Eine der +auf den ersten Blick spektakulärsten Eigenschaften von Swing +ist die Möglichkeit, das Look-and-Feel (also das Aussehen und +die Bedienung einer Anwendung) zur Laufzeit umzuschalten. Dieses als +Pluggable Look-and-Feel bezeichnete +Feature ermöglicht es beispielsweise einem Windows-Anwender, +zwischen drei vordefinierten Look-and-Feels zu wählen (Metal, +Motif und Windows). Benutzer anderer Betriebssysteme können andere +Auswahlmöglichkeiten haben, und es ist möglich, eigene Look-and-Feels +zu schreiben. + +

+Dabei muss die Entscheidung für oder gegen ein bestimmtes Look-and-Feel +keineswegs bereits zum Design- oder Entwicklungszeitpunkt getroffen +werden. Vielmehr wurden alle Swing-Komponenten so entworfen, dass +es möglich ist, das Look-and-Feel einer Anwendung zur Laufzeit +umzuschalten. Das Programm besitzt dazu typischerweise einen speziellen +Menüpunkt oder eine Konfigurationsmöglichkeit, die es dem +Anwender ermöglicht, ein Look-and-Feel nach seinem Geschmack +auszuwählen. Das Programm selbst muss praktisch keinen zusätzlichen +Aufwand treiben, denn das Umschalten wird nach einem einzigen Methodenaufruf +von einem User-Interface-Manager erledigt, der alle nötigen Maßnahmen +koordiniert ausführt. + + + + +

Das Model-View-Controller-Prinzip

+ +

+Neben den äußerlichen Qualitäten wurde auch die Architektur +des Gesamtsystems verbessert. Wichtigste »Errungenschaft« +ist dabei das Model-View-Controller-Prinzip +(kurz MVC genannt), dessen Struktur +sich wie ein roter Faden durch den Aufbau der Dialogelemente zieht. +Anstatt den gesamten Code in eine einzelne Klasse zu packen, werden +beim MVC-Konzept drei unterschiedliche Bestandteile eines grafischen +Elements sorgsam unterschieden: +

+ +

+Das Modell enthält praktisch die gesamte Verarbeitungslogik der +Komponente. Ein wichtiger Aspekt ist dabei, dass ein Model mehrere +Views gleichzeitig haben kann. Damit Veränderungen des Modells +in allen Views sichtbar werden, wird ein Benachrichtigungsmechanismus +implementiert, mit dem das Modell die zugeordneten Views über +Änderungen informiert. Diese Vorgehensweise entspricht dem Observer-Pattern, +wie es in Abschnitt 10.4.9 +erläutert wurde. + +

+Bei den Swing-Dialogelementen wird eine vereinfachte Variante von +MVC verwendet, die auch als Model-Delegate-Prinzip +bezeichnet wird. Hierbei wird die Funktionalität von View und +Controller in einem UI Delegate zusammengefasst. +Dadurch wird einerseits die Komplexität reduziert (oft ist der +Controller so einfach strukturiert, dass es sich nicht lohnt, ihn +separat zu betrachten) und andererseits die in der Praxis mitunter +unhandliche Trennung zwischen View und Controller aufgehoben. Es kann +allerdings sein, dass ein Dialogelement mehr als ein Model besitzt. +So haben beispielsweise Listen und Tabellen neben ihrem eigentlichen +Datenmodell ein weiteres, das nur für die Selektion von Datenelementen +zuständig ist. + + + + +

Aber...

+ +

+Natürlich wäre es zu schön, wenn die geschilderten +Eigenschaften frei von »Nebenwirkungen« wären. Dem +ist (natürlich) nicht so. Neben den vielen Vorteilen bringt die +Verwendung von Swing auch Probleme mit sich: +

+ +

+Glücklicherweise gehören diese Probleme größtenteils +der Vergangenheit an. Die steigenden Rechnerleistungen kompensieren +die Hardwareanforderungen und aktuelle Einsteiger-PCs haben genügend +Leistung, um Swing-Anwendungen performant auszuführen. Mit dem +JDK 1.3 hat SUN zudem die Startzeit der Anwendungen verkürzt, +den Speicherhunger der Swing-Komponenten eingedämmt und ihre +Performance weiter verbessert, und schließlich viele der früheren +Bugs behoben. + + + + +

35.1.3 Wie geht es weiter?

+ +

+Wir wollen uns in diesem und den nächsten Kapiteln mit den grundlegenden +Eigenschaften von Swing beschäftigen. Der Schwerpunkt der Darstellung +liegt dabei auf der Beschreibung der einzelnen Komponenten - mit dem +Anspruch, zumindest ihre jeweils wichtigsten Merkmale zu behandeln. +Die meisten Themen können dabei allerdings nur angerissen werden, +denn eine einigermaßen vollständige Beschreibung von Swing +benötigt ein eigenes Buch. + +

+Meist werden wir daher lediglich die wichtigsten Methoden einer Klasse +vorstellen. Speziellere Eigenschaften müssen wir außer +acht lassen. Auch auf die übrigen Komponenten der Java Foundation +Classes, die 2D- und Accessibility-APIs, +das Input Method Framework und das +Drag-and-Drop API werden wir allenfalls +in Ansätzen eingehen. + +

+Es empfiehlt sich daher, nach den ersten Experimenten weitere Literatur +zu Rate zu ziehen. Swing-Bücher sind mittlerweile in großer +Zahl erhältlich. Auch das frei erhältliche Java-Tutorial +von SUN (siehe Abschnitt 3.2.2) +enthält einen Abschnitt "Creating a GUI with JFC/Swing", der +das Erstellen von Swing-Applikationen ausführlich beschreibt. +Am wichtigsten ist jedoch die API-Dokumentation. Sie ist das +Hilfsmittel zum Erforschen der verborgenen Möglichkeiten einzelner +Swing-Bestandteile. + +

+Bevor wir in den nächsten Kapiteln in die Beschreibung der Komponenten +einsteigen, wollen wir in den beiden letzten Abschnitten dieses Kapitels +noch etwas für die Ungeduldigen tun. Zunächst zeigen wir +ein einfaches Beispiel, an dem die Grundstruktur eines Swing-Programms +erläutert wird. Darin demonstrieren wir auch, wie das Look-and-Feel +des Programms zur Laufzeit umgeschaltet werden kann. Anschließend +geben wir einige Tipps zur Umstellung von AWT-Anwendungen auf Swing +und zeigen wichtige Gemeinsamkeiten und Unterschiede zwischen den +beiden Welten auf. +


+ + + +
 Titel  + Inhalt  + Suchen  + Index  + DOC  +Handbuch der Java-Programmierung, 5. Auflage, Addison +Wesley, Version 5.0.1 +
 <<  +  <   +  >   + >>  + API  +© 1998, 2007 Guido Krüger & Thomas +Stark, http://www.javabuch.de +
+ + + -- cgit v1.2.3