Swing vs JavaFx für Desktop-Anwendungen [geschlossen]

195

Ich habe ein sehr großes Programm, das derzeit SWT verwendet. Das Programm kann sowohl unter Windows als auch unter Mac und Linux ausgeführt werden und ist eine große Desktop-Anwendung mit vielen Elementen. Jetzt, da SWT etwas alt ist, möchte ich entweder zu Swing oder JavaFX wechseln. Und ich würde gerne Ihre Gedanken zu drei Dingen hören.

Mein Hauptanliegen ist, was für eine Desktop-GUI-Anwendung besser ist. (Ich habe online gesucht und viele Leute schlagen vor, dass JavaFX genauso gut ist wie Swing, aber ich habe nicht viele gültige Argumente außer einfachen Meinungsflammenkriegen gesehen). Es muss sowohl auf Windows, Mac als auch auf einigen gängigen Linux-Distributionen funktionieren.

  • Was wird sauberer und pflegeleichter?

  • und was lässt sich schneller von Grund auf neu bauen?

Ich verwende MVC-Methologie in meiner Anwendung, wenn dies hilfreich ist.

Billionen
quelle
23
JavaFX ist gut, wenn Sie bei Null anfangen. Auch weil JavaFX Swing offiziell als Oracle UI-Bibliothek für Java ersetzt. Das bedeutet nicht, dass Swing abgeschafft wird. Es bedeutet nur, dass JavaFX in jeder Version viel mehr Aufmerksamkeit erhält. Vor diesem Hintergrund gibt es bereits eineinhalb Millionen Fragen zu diesem Thema bei SO und anderswo bei Google.
nico_c
3
stackoverflow.com/questions/10587713/… Ich habe auch Google erwähnt. Es gibt schon viel da draußen.
nico_c
Ok, dann scheint der Vorschlag wirklich fx zu sein. Ich werde das offen halten, aber eine Antwort akzeptieren, denke ich. Danke für die Links.
Quillion
1
Hier ist eine kurze Zusammenfassung von JavaFX, obwohl SWT, Swing oder JavaFX zur Erstellung einer Desktop-Anwendung geeignet sind.
Jewelsea
Niemand hat es erwähnt, aber JavaFX wird auf bestimmten Architekturen, die von Oracle als "Server" eingestuft werden (z. B. Solaris), aufgrund der fehlenden Unterstützung von "jfxrt.jar" nicht kompiliert oder ausgeführt.
Malcolm Boekhoff

Antworten:

154

Was wird sauberer und pflegeleichter?

Wenn alle Dinge gleich sind, wahrscheinlich JavaFX - die API ist komponentenübergreifend viel konsistenter. Dies hängt jedoch viel mehr davon ab, wie der Code geschrieben wird, als davon, in welcher Bibliothek er geschrieben wird .

Und was lässt sich schneller von Grund auf neu bauen?

Sehr abhängig von dem, was Sie bauen. Swing hat mehr Komponenten (sowohl von Drittanbietern als auch eingebaut) und noch nicht alle haben den Weg zur neueren JavaFX-Plattform gefunden. Wenn Sie etwas benötigen, muss das Rad möglicherweise in gewissem Umfang neu erfunden werden etwas benutzerdefiniert. Wenn Sie dagegen Übergänge / Animationen / Videos machen möchten, ist dies in FX um Größenordnungen einfacher.

Eine andere Sache zu beachten ist (vielleicht) Aussehen und Gefühl. Wenn Sie unbedingt das Standard-System-Look & Feel haben müssen, kann JavaFX (derzeit) dies nicht bereitstellen. Für mich kein großes Muss (ich bevorzuge sowieso den Standard-FX-Look), aber ich bin mir bewusst, dass einige Richtlinien eine Beschränkung auf Systemstile vorschreiben.

Persönlich sehe ich JavaFX als die "aufstrebende" UI-Bibliothek, die noch nicht ganz da ist (aber mehr als verwendbar), und Swing als die Borderline-Legacy-UI-Bibliothek, die im Moment voll funktionsfähig und unterstützt ist, aber wahrscheinlich nicht sein wird so viel in den kommenden Jahren (und daher besteht die Möglichkeit, dass FX es irgendwann überholen wird.)

Michael Berry
quelle
1
Ich glaube, diese Punkte gelten alle auch für die .NET-Welt in der Desktop-GUI-Welt, in der Windows Presentation Foundation der moderne Ansatz ist, der darauf abzielt, die alten Windows Forms zu ersetzen. Daher ist es theoretisch in allen Aspekten besser, außer es wird (noch?) Nicht. Aber es ist schon Jahre her.) Unterstützen Sie die nativen allgemeinen Steuerelemente / Shell-Looks, die Sie erwartet haben, wie z. B. ein einfaches Dateidialog- / Verzeichnisbrowser- / Baumansichtssteuerelement.
Bitoolean
84

Wie von Oracle angegeben, ist JavaFX der nächste Schritt in der Java-basierten Rich-Client-Strategie. Dementsprechend empfehle ich Folgendes für Ihre Situation:

Was wäre einfacher und sauberer zu pflegen

  • JavaFX hat gegenüber Swing verschiedene Verbesserungen eingeführt, z. B. die Möglichkeit, Benutzeroberflächen mit FXML zu markieren und Themen mit CSS zu erstellen. Es hat ein großes Potenzial, einen modularen, sauberen und wartbaren Code zu schreiben.

Was wäre schneller von Grund auf neu zu bauen

  • Dies hängt stark von Ihren Fähigkeiten und den von Ihnen verwendeten Werkzeugen ab.
    • Für den Swing bieten verschiedene IDEs Werkzeuge für eine schnelle Entwicklung. Das Beste, was ich persönlich gefunden habe, ist der GUI-Builder in NetBeans .
    • JavaFX wird auch von verschiedenen IDEs unterstützt, allerdings nicht so ausgereift wie die derzeitige Unterstützung von Swing. Die Unterstützung für Markups in FXML und CSS macht die GUI-Entwicklung unter JavaFX jedoch intuitiv.

MVC-Musterunterstützung

  • JavaFX ist sehr freundlich mit MVC-Mustern und Sie können Ihre Arbeit sauber trennen als: Präsentation (FXML, CSS), Modelle (Java, Domänenobjekte) und Logik (Java).
  • IMHO ist die MVC-Unterstützung in Swing nicht sehr ansprechend. Der Fluss, den Sie über verschiedene Komponenten hinweg sehen, ist nicht konsistent.

Weitere Informationen finden Sie in diesen FAQ von Oracle zu JavaFX hier.

Yonathan W'Gebriel
quelle
14

Niemand hat es erwähnt, aber JavaFX wird auf bestimmten Architekturen, die von Oracle als "Server" eingestuft werden (z. B. Solaris), aufgrund der fehlenden Unterstützung von "jfxrt.jar" nicht kompiliert oder ausgeführt. Bleib bis auf weiteres bei SWT.

Malcolm Boekhoff
quelle
13
@Quillion bittet speziell um etwas zum Erstellen einer Desktop-Anwendung, die "sowohl unter Windows als auch unter Mac und einigen beliebten Linux- Varianten funktionieren muss". . Ich denke, er kümmert sich nicht um Solaris.
Tim Büthe
5

Ich glaube nicht, dass es eine richtige Antwort auf diese Frage gibt, aber mein Rat wäre, bei SWT zu bleiben, es sei denn, Sie stoßen auf schwerwiegende Einschränkungen, die eine solch massive Überarbeitung erfordern.

Außerdem ist SWT tatsächlich neuer und aktiver als Swing. (Es wurde ursprünglich als Ersatz für Swing mit nativen Komponenten entwickelt).

Russell Zahniser
quelle
16
SWT sollte Swing niemals ersetzen. Wie? Swing kam mit Java von SUN und SWT läuft nur auf 4 oder 5 Plattformen und stammt ursprünglich von IBM und wurde in der Eclispe Foundation weiterentwickelt. Wenn überhaupt, könnte man sagen: SWT wollte AWT ersetzen.
Angel O'Sphere
0

Ich würde mich umschauen, um einige Komponenten (von Drittanbietern?) Zu finden, die das tun, was Sie wollen. Ich musste benutzerdefinierte Swing-Komponenten für eine Agenda-Ansicht erstellen, in der Sie mehrere Ressourcen buchen können, sowie ein Excel-ähnliches Raster, das gut mit der Tastaturnavigation usw. funktioniert. Ich hatte eine schreckliche Zeit, sie dazu zu bringen, gut zu arbeiten, weil ich mich mit vielen der vielen Feinheiten von Swing befassen musste, wenn ich auf ein Problem stieß. Maus- und Fokusverhalten und viele andere Dinge können sehr schwierig zu korrigieren sein, insbesondere für einen gelegentlichen Swing-Benutzer. Ich würde hoffen, dass JavaFX ein bisschen zukunftsorientierter und sofort einsatzbereit ist.

eriksensei
quelle
0

Bei älteren Notebooks mit integriertem Video startet und funktioniert die Swing-App viel schneller als die JavaFX-App. Für die Entwicklung würde ich empfehlen, auf Scala umzusteigen - eine vergleichbare Scala Swing-App enthält 2-3 mal weniger Code als Java. Swing vs SWT: Netbeans GUI deutlich schneller als Eclipse ...

user2053898
quelle
Scala Swing ist gut zu erwähnen
Unentschieden