Java Desktop-Anwendung: SWT vs. Swing

Ich bin ein Webentwickler am Tag und denke darüber nach, meine erste echte Desktop-Anwendung zu erstellen. Die Idee ist, ein Tool zu erstellen, das eine sehr repetitive Aufgabe in einer Webanwendung automatisiert, in der keine API verfügbar ist.

Ich weiß, dass ich Java benutzen möchte. Ich benutze es vorher für Web-Kram, kenne die Syntax ziemlich gut und möchte, dass die Anwendung so einfach wie möglich ist.

Wo ich mir nicht sicher bin ist, ob ich SWT oder Swing benutzen soll. Da mein Hauptpublikum Windows verwendet, möchte ich es dort so natürlich wie möglich aussehen. Linux und Mac sollten funktionieren, aber das Aussehen ist hier nicht so wichtig.

Also, was sind die Argumente für und gegen jedes UI-Framework, Swing oder SWT?

Vielen Dank.

PS: Ich entwickle unter Windows mit Eclipse. Aber dachte darüber nach, mit Netbeans zu spielen.

Vorteile swing:

  • Teil der Java-Bibliothek, keine Notwendigkeit für zusätzliche native Bibliotheken
  • funktioniert auf allen Plattformen gleich
  • Integrierter GUI Editor in Netbeans und Eclipse
  • gute Online-Tutorials von Sun / Oracle
  • Unterstützt von offiziellen Java-Erweiterungen (wie Java OpenGL)

Nachteile Swing:

  • Natives Aussehen und Verhalten können sich von dem echten nativen System unterscheiden.
  • schwere Komponenten (native / awt) verbergen Swing-Komponenten, kein Problem die meiste Zeit wie die Verwendung von schweren Komponenten ist eher selten

Vorteile SWT:

  • verwendet wenn möglich native Elemente, also immer natives Verhalten
  • Unterstützt von Eclipse, GUI Editor VEP (VEP unterstützt auch Swing und AWT)
  • große Anzahl von Beispielen online
  • hat eine integrierte awt / swt-brücke für den einsatz von awt- und swing-komponenten

Nachteile SWT:

  • erfordert systemeigene Bibliotheken für jedes unterstützte System
  • unterstützt möglicherweise nicht jedes Verhalten auf allen Systemen aufgrund der verwendeten systemeigenen Ressourcen (Hinweisoptionen)
  • Verwaltung nativer Ressourcen, während native Komponenten häufig mit ihren übergeordneten anderen Ressourcen wie Fonts entsorgt werden müssen, die manuell freigegeben oder als Dispo-Listener für eine Komponente zur automatischen Freigabe registriert werden müssen.

Es ist wichtig zu beachten, dass einige Benutzer und einige Wiederverkäufer (Dell) eine 64-Bit-VM auf ihrem 64-Bit-Windows installieren und nicht dieselbe SWT-Bibliothek auf 32-Bit- und 64-Bit-VMs verwenden können.

Das bedeutet, dass Sie unterschiedliche Pakete verteilen und testen müssen, je nachdem, ob Benutzer eine 32-Bit- oder eine 64-Bit-Java-VM verwenden. Sehen Sie sich dieses Problem mit Azureus an, aber Sie haben es auch mit Eclipse, wo die Builds auf der Front-Download-Seite bis heute nicht auf einer 64-Bit-VM ausgeführt werden.

pro Schwung:

  • Der größte Vorteil von Swing IMHO ist, dass Sie die Bibliotheken nicht mit Ihrer Anwendung (die Dutzende von MB (!)) Vermeiden müssen.
  • Native Look and Feel ist viel besser für Swing als in den frühen Jahren
  • performance ist vergleichbar mit swt (Swing ist nicht langsam!)
  • NetBeans bietet Matisse als einen komfortablen Komponenten-Builder.
  • Die Integration von Swing-Komponenten in JavaFX ist einfacher.

Aber unter dem Strich würde ich nicht vorschlagen, ‘pure’ Swing oder swt zu verwenden 😉 Es gibt mehrere Anwendungs-Frameworks für swing / swt out. Schau hier . Die größten Spieler sind Netbeans (Swing) und Eclipse (Swt). Ein weiterer schöner Rahmen könnte Griffon sein und ein schönes “Set von Komponenten” ist Pivot (Swing). Griffon ist sehr interessant, weil es viele Bibliotheken integriert und nicht nur schwingt ; auch Pivot, swt, etc

Ich würde Swing aus verschiedenen Gründen verwenden.

  • Es gibt es schon länger und es wurden mehr Entwicklungsanstrengungen unternommen. Daher ist es wahrscheinlich mehr Feature abgeschlossen und (vielleicht) hat weniger Bugs.

  • Es gibt viele Dokumentationen und andere Anleitungen zur Erstellung performanter Anwendungen.

  • Es sieht so aus, als würden sich Swing-Änderungen auf allen Plattformen gleichzeitig ausbreiten, während Änderungen an SWT zunächst unter Windows und dann unter Linux erscheinen.

Wenn Sie eine sehr funktionsreiche Anwendung erstellen möchten, sollten Sie sich die NetBeans RCP (Rich Client Platform) ansehen. Es gibt eine Lernkurve, aber Sie können schöne Anwendungen schnell mit ein wenig Übung zusammenstellen. Ich habe nicht genug Erfahrung mit der Eclipse-Plattform, um ein gültiges Urteil zu fällen.

Wenn Sie nicht den gesamten RCP verwenden möchten, verfügt NetBeans auch über viele nützliche Komponenten, die unabhängig voneinander abgerufen und verwendet werden können.

Ein anderes Wort des Rates, schauen Sie sich verschiedene Layout-Manager. Sie haben mich beim Lernen lange gestolpert. Einige der besten sind nicht einmal in der Standardbibliothek. Die Tools MigLayout (für Swing und SWT) und JGoodies Forms gehören meiner Meinung nach zu den besten.

Ich würde Swing wählen, nur weil es für Java “nativ” ist.

Schauen Sie sich auch http://swingx.java.net/ an .

Für Ihre Anforderungen klingt es wie das Endergebnis, Swing zu verwenden, da es einfacher ist, mit zu beginnen und nicht so eng in die native Plattform wie SWT integriert ist.

Swing ist normalerweise eine sichere Wette.

Interessante Frage. Ich kenne SWT nicht so gut, um damit zu protzen (im Gegensatz zu Swing und AWT), aber hier ist der Vergleich auf SWT / Swing / AWT.

http://www.developer.com/java/other/article.php/10936_2179061_2/Swing-and-SWT-A-Tale-of-Two-Java-GUI-Libraries.htm

Und hier ist die Seite, wo Sie Tutorial über alles über SWT bekommen können ( http://www.java2s.com/Tutorial/Java/0280__SWT/Catalog0280__SWT.htm )

Hoffe, dass du eine richtige Entscheidung triffst (wenn es richtige Entscheidungen in der Codierung gibt) … 🙂

Wenn Sie vorhaben, eine voll funktionsfähige Anwendung mit mehr als einer Handvoll functionen zu erstellen, schlage ich vor, direkt zu Eclipse RCP als Framework zu springen.

Wenn Ihre Anwendung nicht zu groß wird oder Ihre Anforderungen zu einfach sind, um von einem normalen Geschäftsrahmen gehandhabt zu werden, können Sie sicher mit Swing springen.

Am Ende des Tages schlage ich vor, dass Sie beide Technologien ausprobieren, um den einen Anzug besser zu finden. Wie Netbeans vs Eclipse vs IntelliJ gibt es hier keine absolut richtige Antwort und beide Frameworks haben ihre eigenen Nachteile.

Pro Schwung:

  • mehr Experten
  • mehr Java-ähnlich (fast kein öffentliches Feld, keine Notwendigkeit, über Ressourcen zu verfügen)

Pro SWT:

  • mehr Betriebssystem nativ
  • schneller

Eine Sache zu beachten: Screenreader

Aus bestimmten Gründen funktionieren einige Swing-Komponenten nicht gut, wenn Sie einen Bildschirmleser (und die Java AccessBridge für Windows) verwenden. Wissen, dass verschiedene Screenreader zu unterschiedlichem Verhalten führen. Und meiner Erfahrung nach ist der SWT-Tree in Kombination mit einem Screenreader viel besser als der Swing-Tree. Unsere Anwendung endete somit mit der Verwendung von SWT- und Swing-Komponenten.

Zum Verteilen und Laden der richtigen SWT-Bibliothek, finden Sie diesen Link möglicherweise nützlich: http://www.chrisnewland.com/select-correct-swt-jar-for-your-os-and-jvm-at-runtime-191

SWT wurde als Antwort auf die Trägheit von Swing um die Jahrhundertwende geschaffen. Jetzt, wo die Unterschiede in der performance vernachlässigbar werden, denke ich, Swing ist eine bessere Option für Ihre Standardanwendungen. SWT / Eclipse hat einen schönen Rahmen, der mit einer großen Anzahl von Kesselblech-Codes hilft.