|
Article on other languages: |
Die Widgets von Swing mit dem Ocean Look and Feel (Standard seit Java 1.5)
Bei Swing handelt es sich um eine Programmierschnittstelle und Grafikbibliothek zum Programmieren von grafischen Benutzeroberflächen. Swing wurde von Sun Microsystems für die Programmiersprache Java entwickelt. Seit Java-Version 1.2 (1998) ist es Bestandteil der Java-Runtime. Swing gehört zu den Java Foundation Classes (JFC), die eine Sammlung von Bibliotheken zur Programmierung von grafischen Benutzerschnittstellen bereitstellen. Zu diesen Bibliotheken gehören Java2D, das Accessibility-API, das Drag & Drop-API und das Abstract Window Toolkit (AWT). Swing baut auf dem älteren AWT auf und ist mit den anderen APIs verwoben.
Merkmale
Swing wurde erstmals mit dem JDK 1.1.5 als externe Bibliothek ausgeliefert und ist seit JDK 1.2 („Java 2“) fester Bestandteil der Java-Laufzeitumgebung. Swing hatte sehr bald den Ruf, eine schlechte Performance aufzuweisen und für „ernsthafte“ Anwendungen ungeeignet zu sein. Der Standard-Stil (Look&Feel) von Swing-Fenstern fand ebenfalls nicht besonders viele Freunde. Mittlerweile hat sich die Performance durch verbesserte Hardwareunterstützung der Beschleunigungsfunktionen von Grafikkarten und über Performance-Verbesserungen in den Klassenbibliotheken selbst und bei der Java Runtime deutlich verbessert. Swing ist sehr flexibel, sehr „sauber“, modular und objektorientiert aufgebaut, so dass es sich gerade für die Entwicklung komplexer Anwendungen gut eignet. Durch die Plattformunabhängigkeit entfällt ebenfalls viel Entwicklungs- und Testarbeit. Hauptkonkurrent von Swing ist das für Eclipse entwickelte SWT. MultithreadingSwing ist nicht thread-sicher, es kann also zu unerwarteten Wechselwirkungen zwischen verschiedenen Threads kommen, wenn nicht sorgfältig programmiert wird.[1] Statt dessen sind die Swing-Komponenten so implementiert, dass ihre Methoden stets in einem sogenannten Event Dispatch Thread von AWT ausgeführt werden müssen, der die gesamte Ereignisverarbeitung grafisch-interaktiver Java-Anwendungen durchführt.[2] Um dies zu vereinfachen, stellt die Hilfsklasse
Außerhalb des JRE stellte Sun eine „SwingWorker“ genannte Basisklasse zur Verfügung, die zwei zu überladende Methoden anbietet: Eine die in einem eigenen Thread aufgerufen wird und eine längerdauernde Operation ausführen kann und eine weitere, die nach dieser Operation im Event Dispatch Thread ausgeführt wird und Swing-Komponenten manipulieren darf. Seit Java 1.6 ist sie als javax.swing.SwingWorker im JRE enthalten. BeispielAls Beispiel für eine Swing-Anwendung wird hier das obligatorische Hallo-Welt-Programm angegeben: import javax.swing.*; class HelloWorldSwing { public static void main(String[] args) { // Wrappe den auszuführenden Quellcode in ein eigenes // Runnable-Objekt, um diesen nachher im Event Dispatching // Thread ausführen zu können Runnable guiCreator = new Runnable() { public void run() { // Erstellt das Swing-Fenster JFrame fenster = new JFrame("Hallo Welt mit Swing"); // Swing anweisen, das Programm zu beenden, wenn das Fenster // geschlossen wird fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Fügt den "Hallo Welt"-Text hinzu JLabel label = new JLabel("Hallo Welt"); fenster.getContentPane().add(label); // Zeigt das Fenster an fenster.setSize(300, 200); fenster.setVisible(true); } }; // Führe den obigen Quellcode im Event-Dispatch-Thread aus SwingUtilities.invokeLater(guiCreator); } } Teile dieses Quellcodes werden von unterschiedlichen Threads ausgeführt. Der Thread, der die Methode main ausführt, ist für gewöhnlich nicht der Event-Dispatch-Thread (EDT). Swingkomponenten sollten jedoch generell nur vom EDT erzeugt und verändert werden (falls in der Dokumentation nicht ausdrücklich anderes steht). Daher wird der Quellcode für die GUI in ein eigenes Runnable-Objekt verpackt. Der Thread, der die Methode main ausführt, erzeugt also nur das Runnable-Objekt und weist Swing an, diesen Quellcode später im EDT auszuführen. Einzelnachweise
Literatur
Weblinks
|
This article is from Wikipedia. All text is available under the terms of the GNU Free Documentation License.