www.wikidata.de-de.nina.az
Swing ist ein GUI Toolkit fur die Programmiersprache Java von Sun Microsystems Seit Java Version 1 2 1998 ist es Bestandteil der Java Runtime Swing gehort zu den Java Foundation Classes JFC die eine Sammlung von Bibliotheken zur Programmierung von grafischen Benutzerschnittstellen bereitstellen Zu diesen Bibliotheken gehoren Java 2D die Java Accessibility API JAAPI das Drag and Drop API und das Abstract Window Toolkit AWT Swing baut auf dem alteren AWT auf und ist mit den anderen APIs verwoben Die Widgets von Swing mit dem Ocean Look and Feel Standard seit Java 1 5 Klassenhierarchie von AWT und SwingHauptkonkurrent von Swing ist das fur Eclipse entwickelte SWT Der designierte Nachfolger von Swing ist das Framework JavaFX das seit Marz 2014 im Lieferumfang des Oracle JDK enthalten ist das aber bisher nicht durch den Java Community Process als offizieller Java Standard spezifiziert wurde Inhaltsverzeichnis 1 Merkmale 1 1 Aufbau 1 2 Pluggable Look and Feel 1 3 Leichtgewichtige Komponenten 1 4 Vergleich 1 5 Multithreading 2 Geschichte 3 Beispiel 4 Erweiterungen 5 Swing Editoren 6 Literatur 7 Weblinks 8 EinzelnachweiseMerkmale BearbeitenAufbau Bearbeiten Swing ist modular und objektorientiert aufgebaut so dass es sich gerade fur die Entwicklung komplexer Anwendungen gut eignet Durch die Plattformunabhangigkeit entfallt ebenfalls viel Entwicklungs und Testarbeit Pluggable Look and Feel Bearbeiten Das Erscheinungsbild Look siehe Skin und das Verhalten Feel von Swing Komponenten kann mittels sogenannter Look and Feels angepasst werden Auf allen Plattformen stehen sowohl das Motif Look and Feel als auch das Metal Look and Feel ab Java 5 das Ocean Look and Feel zur Verfugung auf Linux Gtk Mac und Windows zusatzlich ein dem systemublichen angepasstes eigenes Look and Feel Es existieren eine Reihe unabhangig entwickelter Erscheinungsbilder wovon die meisten auf Metal basieren Seit Java 1 5 ist das Synth Look and Feel hinzugekommen dessen aus Bildern zusammengesetztes Erscheinungsbild in einer XML Datei beschrieben wird sodass kein Java Code geschrieben werden muss Mit Java 1 6 Update 10 wurde das vollstandig vektorbasierte Nimbus Look and Feel eingefuhrt 1 Leichtgewichtige Komponenten Bearbeiten Swing Komponenten werden direkt von Java gerendert und sind nicht von nativen Betriebssystemkomponenten abhangig Dadurch funktionieren alle Swing Komponenten auf allen Plattformen gleich unabhangig davon ob die entsprechende Plattform eine Komponente zur Verfugung stellt oder nicht Der Nachteil ist dass eine Swing Anwendung nicht wie eine fur das Betriebssystem entwickelte Anwendung aussieht Das kann aber durch eine Auswahl an entsprechenden Pluggable Look and Feels kompensiert werden Diese Eigenschaft wird mit dem englischen Wort Lightweight UI beschrieben lightweight all Java language Vergleich Bearbeiten Im Vergleich zu AWT hat man mit Swing folgende zusatzliche Komponenten die zur Oberflachenerzeugung genutzt werden konnen Keyboard Accelerators also Tastenkombinationen zur Steuerung von Komponenten Drag and Drop Setzen des Look and Feel Tooltips automatisches Double Buffering neue Layout Manager Panels Anwendungen mit Multiple Document Interface zusatzliche Komponenten um Tabellen und Baumstrukturen darzustellenMultithreading Bearbeiten Swing ist nicht thread sicher es kann also zu unerwarteten Wechselwirkungen zwischen verschiedenen Threads kommen wenn nicht sorgfaltig programmiert wird 2 Stattdessen sind die Swing Komponenten so implementiert dass ihre Methoden stets in einem sogenannten Event Dispatch Thread des AWT ausgefuhrt werden mussen der die gesamte Ereignisverarbeitung grafisch interaktiver Java Anwendungen durchfuhrt 3 Um dies zu vereinfachen stellt die Hilfsklasse SwingUtilities zwei Methoden bereit die aus anderen Threads heraus aufgerufen werden konnen und ein ausfuhrbares Objekt vom Typ Runnable als Parameter nehmen 4 invokeLater reiht das ausfuhrbare Objekt in die Ereigniswarteschlange von AWT ein und kehrt noch vor dessen Ausfuhrung in den aufrufenden Code zuruck Der aufrufende Thread wird also nicht blockiert invokeAndWait reiht das ausfuhrbare Objekt in die Ereigniswarteschlange von AWT ein und wartet bis es abgearbeitet wurde Der aufrufende Thread wird also blockiert Verstosse gegen diese Konventionen werden dem Programmierer nicht gemeldet so dass damit verbundene Schwierigkeiten lange unentdeckt bleiben bzw gar nicht behoben werden UI Frameworks wie SWT oder auch NET WinForms handhaben dies anders und quittieren fehlerhafte Aufrufe sofort Ausserhalb des JRE stellte Sun eine SwingWorker genannte Basisklasse zur Verfugung die zwei zu uberladende Methoden anbietet Eine die in einem eigenen Thread aufgerufen wird und eine langerdauernde Operation ausfuhren kann und eine weitere die nach dem Ende dieser Operation im Event Dispatch Thread ausgefuhrt wird und Swing Komponenten manipulieren darf Des Weiteren existiert ein Mechanismus der es erlaubt Zwischenschritte z B in einer Fortschritts Anzeige zu visualisieren Seit Java 1 6 ist sie als javax swing SwingWorker im JRE enthalten Geschichte BearbeitenSwing wurde erstmals mit dem JDK 1 1 5 Ende 1997 als externe Bibliothek ausgeliefert und ist seit JDK 1 2 Java 2 Ende 1998 fester Bestandteil der Java Laufzeitumgebung Swing hatte sehr bald den Ruf eine schlechte Performance aufzuweisen und fur ernsthafte Anwendungen ungeeignet zu sein Der Standard Stil Look amp Feel von Swing Fenstern fand ebenfalls nicht besonders viele Freunde Sun legte daraufhin grosses Augenmerk auf die Verbesserung des Aussehens der mitgelieferten Look and Feels sowie der Performance von Swing Mittlerweile hat sich die Performance durch verbesserte Hardwareunterstutzung der Beschleunigungsfunktionen von Grafikkarten sowie uber Performance Verbesserungen in den Klassenbibliotheken selbst und bei der Java Runtime deutlich verbessert Spatestens seit Java Version 1 4 2002 weist Swing keine merkbaren Performanceunterschiede zu nativen GUIs auf Auch Performancevergleiche zwischen Swing und SWT zeigen keine Performanceunterschiede auf 5 Beispiel BearbeitenAls Beispiel fur eine Swing Anwendung wird hier das Hallo Welt Programm angegeben import javax swing public class HelloWorldSwing public static void main String args Verpacke den auszufuhrenden Quellcode in ein eigenes Runnable Objekt um diesen nachher im Event Dispatching Thread ausfuhren zu konnen 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 Fugt den Hallo Welt Text hinzu JLabel label new JLabel Hallo Welt fenster add label Zeigt das Fenster an fenster setSize 300 200 fenster setVisible true Fuhre den obigen Quellcode im Event Dispatch Thread aus SwingUtilities invokeLater guiCreator Teile dieses Quellcodes werden von unterschiedlichen Threads ausgefuhrt Der Thread der die Methode main ausfuhrt ist fur gewohnlich nicht der Event Dispatch Thread EDT Swingkomponenten sollten jedoch generell nur vom EDT erzeugt und verandert werden falls in der Dokumentation nicht ausdrucklich anderes steht Daher wird der Quellcode fur die GUI in ein eigenes Runnable Objekt verpackt Der Thread der die Methode main ausfuhrt erzeugt also nur das Runnable Objekt und weist Swing an diesen Quellcode spater im EDT auszufuhren Erweiterungen BearbeitenSwing lasst sich an verschiedenen Stellen mittels des in Swing eingebauten Plug In Konzeptes erweitern Typische Erweiterungen betreffen Look amp Feels Layoutmanager und weitere Komponenten Das SUN Open Source Projekt SwingLabs bietet eine Reihe von Erweiterungen fur Swing und dient als Testumgebung fur zukunftige Erweiterungen von Swing Unter anderem wurden in SwingLabs die in Java 6 eingefuhrten Klassen GroupLayout SystemTray und Desktop gehostet Weitere Erweiterungen werden von der java net Java Desktop Community 6 im Java Desktop Swing Depot gesammelt 7 JGoodies von Karsten Lentzsch bietet ebenso eine Reihe an Swing Erweiterungen wie beispielsweise das FormLayout 8 Das Projekt Spring Richclient bietet eine Integration von Swing in das Spring Framework Es wird allerdings seit Mitte 2009 nicht mehr weiterentwickelt Swing Editoren BearbeitenEs gibt eine Reihe meist kostenpflichtiger WYSIWYG GUI Design Tools fur Swing Die folgenden sind die bekanntesten 9 JFormDesigner Kommerzieller Editor sowohl eigenstandig als auch als Eclipse IntelliJ IDEA und JBuilder Plugin Jigloo Kommerzielles Eclipse Plugin fur Swing und SWT GUIs kostenlos fur nicht kommerzielle Zwecke Window Builder Pro Ehemals kommerzielles Eclipse Plugin fur Swing SWT und GWT GUIs wird aktuell in ein Eclipse Projekt uberfuhrt 10 Matisse4MyEclipse Portierung von Matisse dem GUI Builder der NetBeans IDE fur Eclipse und Swing lauft nur unter MyEclipse Visual Editor Open Source Eclipse Plugin fur Swing und SWT GUIs zugehoriges Entwicklungsprojekt ist seit April 2012 nicht mehr aktiv Literatur BearbeitenDeutschsprachige Bucher David Geary Graphic Java 2 0 Band II Die JFC beherrschen Swing 3 Auflage Markt Technik 15 November 1999 ISBN 3 8272 9590 4 Ubersetzung des englischen Originals David Geary Graphic Java 2 0 Die JFC beherrschen AWT 3 Auflage Markt Technik 15 Juli 1999 ISBN 3 8272 9585 8 Ubersetzung des englischen Originals Paul Fischer Grafik Programmierung mit Java Swing Addison Wesley 15 September 2001 ISBN 3 8273 1910 2 Englischsprachige Bucher Marc Loy Robert Eckstein Dave Wood Java Swing 2 Auflage O Reilly November 2002 ISBN 0 596 00408 7 Kathy Walrath Mary Campione Alison Huml The JFC Swing Tutorial 2 Auflage Addison Wesley Professional Februar 2004 ISBN 0 201 91467 0 Referenz Kim Topley Core Swing Advanced Programming Prentice Hall 2000 ISBN 0 13 083292 8 Kim Topley Core Java Foundation Classes Prentice Hall 1998 ISBN 0 13 080301 4 David M Geary Mastering the JFC Volume II Swing 3 Auflage Prentice Hall PTR 1998 ISBN 0 13 079667 0 Referenz David M Geary Mastering the JFC Volume I AWT 3 Auflage Prentice Hall PTR 1999 ISBN 0 13 079666 2 Referenz Weblinks Bearbeiten nbsp Wikibooks Java Standard Grafische Oberflachen mit Swing Lern und Lehrmaterialien The Swing Tutorial bei Oracle Christian Ullenboom Java ist auch eine Insel Einfuhrung in grafische Oberflachen ISBN 978 3 8362 7737 2Einzelnachweise Bearbeiten Swing Enhancements in the Java Standard Edition 6 0 und SE 6 Update 10 Release Notes bei Oracle Christian Ullenboom Swing ist nicht Thread sicher online abgerufen am 9 Marz 2008 AWT Threading Issues online abgerufen am 18 April 2007 SwingUtilities Java Platform SE 6 2006 online abgerufen am 18 April 2007 Java API Dokumentation Kriznar Igor SWT Vs Swing Performance Comparison PDF cosylab com 3 Marz 2006 archiviert vom Original am 4 Juli 2008 abgerufen am 16 September 2009 Initial expectation before performing this benchmark was to find SWT outperform Swing This expectation stemmed from greater responsiveness of SWT based Java applications e g Eclipse IDE compared to Swing based applications However this expectation could not be quantitatively confirmed nbsp Info Der Archivlink wurde automatisch eingesetzt und noch nicht gepruft Bitte prufe Original und Archivlink gemass Anleitung und entferne dann diesen Hinweis 1 2 Vorlage Webachiv IABot cosylib cosylab com Java Desktop Memento des Originals vom 29 Juli 2005 im Internet Archive nbsp Info Der Archivlink wurde automatisch eingesetzt und noch nicht gepruft Bitte prufe Original und Archivlink gemass Anleitung und entferne dann diesen Hinweis 1 2 Vorlage Webachiv IABot community java net Swing Depot Component Suites Memento des Originals vom 9 Juni 2009 im Internet Archive nbsp Info Der Archivlink wurde automatisch eingesetzt und noch nicht gepruft Bitte prufe Original und Archivlink gemass Anleitung und entferne dann diesen Hinweis 1 2 Vorlage Webachiv IABot www javadesktop org JGoodies Homepage Computerwoche GUI Builder fur Eclipse Memento vom 16 Juli 2012 im Internet Archive eclipse org Abgerufen von https de wikipedia org w index php title Swing Java amp oldid 235341953