wake-up-neo.net

Java GUI-Frameworks. Was auszusuchen? Swing, SWT, AWT, SwingX, JGoodies, JavaFX, Apache Pivot?

Es gibt eine Menge GUI-Frameworks für Java, aber was wird heute als Framework der Wahl anerkannt?

Das Folgende ist mein Verständnis der verschiedenen Frameworks, bitte korrigieren Sie mich, wenn ich falsch liege. Dies ist eine sehr locker definierte Reihe von Fragen, aber ich denke immer noch, dass es für jeden nützlich ist, der darüber nachdenkt, reichhaltige GUI-Anwendungen zu erstellen.


AWT

Ist das Fundament von Swing, es funktioniert gut, aber es fehlen fortschrittliche Komponenten. Wenn Sie umfangreiche Anwendungen erstellen möchten, ist AWT wahrscheinlich nicht der richtige Weg. Für kleinere GUI-Anwendungen, für die keine umfangreichen Benutzeroberflächen erforderlich sind. Dies könnte perfekt passen, da es sich um ein bewährtes Framework handelt.


Swing

Basierend auf AWT wie zuvor angegeben. In den Kinderschuhen galt es als langsam und fehlerhaft und veranlasste IBM, SWT für Eclipse zu erstellen. Mit Java 5 (oder 6?) Wurde Swing zum bevorzugten Framework für die Erstellung neuer Anwendungen. Swing hat viele reichhaltige Komponenten, aber in einigen Bereichen fehlt es noch. Ein Beispiel ist, dass es keine voll funktionsfähige TreeTable-Komponente gibt, die sortieren und filtern/suchen kann.


SWT

Von IBM für Eclipse entwickelt, schienen sie zu der Zeit zu glauben, dass Swing nicht für Eclipse geeignet war. An sich ist es ziemlich einfach und nutzt die nativen Widgets der Plattform über JNI. Es hat überhaupt nichts mit Swing und AWT zu tun. Ihre API ist jedoch etwas klobig und nicht intuitiv. Sie haben einige fortgeschrittene Komponenten wie ein TreeTable. (aber ich denke nicht, dass sie das Sortieren und Filtern aus dem Kasten heraus stützen). SWT verwendet einige native Bindungen (über JNI?), Und im Internet herrscht die Kritik, dass dieses Framework in heutigen Projekten nicht verwendet werden sollte. (warum nicht?)


SwingX

Basierend auf Swing ist es die Mission, reichhaltige Komponenten für den Swing zu entwickeln. Noch in der Entwicklung. (Nicht sehr aktiv.) Haben Sie einen sehr schönen Satz von Komponenten, wie zum Beispiel TreeTable. Aber der TreeTable unterstützt meines Wissens nicht das Filtern und Sortieren. Es unterstützt jedoch die Suche mit Hervorhebung.

Beachten Sie, dass SwingX Komponenten (AFAIU) sind, die Erweiterungen oder Kompositionen vorhandener Swing-Komponenten sind


JGoodies

Ein Rahmen, von dem ich nichts weiß ... Was sind seine Stärken und Schwächen? Was unterscheidet Jgoodies vom Rest?

JGoodies OTOH handelt von PLAFs und Layouts.


JavaFX

Das neueste Flaggschiff von Java/Oracle. vielversprechend als Standard für die Entwicklung umfangreicher Desktop- oder Webanwendungen.


Apache Pivot

Die Benutzeroberfläche wird mithilfe von Java2D gerendert, wodurch die Auswirkungen von (IMO-, aufgeblähten) Vermächtnissen von Swing und AWT minimiert werden. (@ Augustus Thoo)

Das Hauptaugenmerk scheint auf RIA (Rich Internet Applications) zu liegen, es scheint jedoch auch auf Desktop-Anwendungen anwendbar zu sein. Und als persönlicher Kommentar sieht es sehr interessant aus! Mir gefällt besonders, dass es ein Apache-Projekt ist.

https://cwiki.Apache.org/PIVOT/frequently-asked-questions-faq.html


Qt Jambi

Ein Java Wrapper für die native qt-Bibliothek, die in c/c ++ geschrieben ist. Sehr mächtig, weit verbreitet und akzeptiert. Hat viele GUI-Komponenten und eine einfach zu bedienende API.

http://qt-jambi.org/


Also, um zu versuchen, ein bisschen zusammenzufassen, was ich frage:

Angenommen, ich wollte heute eine Desktop-Anwendung in Java erstellen, die viele erweiterte Komponenten umfasst. Was soll ich wählen? Und warum?

Welches dieser Frameworks sollte als veraltet und welches als Framework der fernen Zukunft anerkannt werden?

Was ist das heutige De-facto-Standard-Framework und welche Tools verwenden Sie, um Java GUI-Anwendungen zu erstellen?


Ich könnte es bereuen, das gefragt zu haben, aber ich werde es trotzdem versuchen:

C # /. Net soll einen sehr guten Satz benutzerfreundlicher Komponenten haben, die in alle möglichen Richtungen gebogen werden können. Und nachdem ich verschiedene Java Frameworks bis zu einem gewissen Grad untersucht habe, kann ich anscheinend nicht dasselbe über Java sagen. Warum ist das? Warum verfügt Java (die weltweit am häufigsten verwendete Programmiersprache) nicht über die gleichen GUI-Komponenten?

Ist es nur so, dass Java die GUI-Komponenten auf einer viel niedrigeren Ebene basiert und es möglich ist, all diese erweiterten Komponenten zu schreiben, nach denen ich suche, aber Sie müssen viel, wenn nicht die ganze Arbeit selbst erledigen ?

229
netbrain

Entscheidungsbaum:

  1. Frameworks wie Qt und SWT benötigen native DLLs. Sie müssen sich also fragen: Werden alle erforderlichen Plattformen unterstützt? Können Sie die nativen DLLs mit Ihrer App packen?

    Sehen Sie hier, wie dies für SWT gemacht wird .

    Wenn Sie hier eine Wahl haben, sollten Sie Qt der SWT vorziehen. Qt wurde von Leuten entwickelt, die die Benutzeroberfläche und den Desktop verstehen, während SWT aus der Notwendigkeit heraus entwickelt wurde, Eclipse schneller zu machen. Es ist eher ein Performance-Patch für Java 1.4 als ein UI-Framework. Ohne JFace fehlen viele wichtige UI-Komponenten oder sehr wichtige Funktionen von UI-Komponenten (z. B. das Filtern nach Tabellen).

    Wenn in SWT eine Funktion fehlt, die Sie benötigen, kann das Framework diese nicht erweitern. Beispielsweise können Sie keine Klasse darin erweitern (die Klassen sind nicht endgültig, sie lösen nur Ausnahmen aus, wenn das Paket von this.getClass() nicht org.Eclipse.swt ist und Sie keine neuen Klassen hinzufügen können das Paket, weil es signiert ist).

  2. Wenn Sie eine native, reine Java Lösung benötigen, bleiben Sie beim Rest. Beginnen wir mit AWT, Swing, SwingX - dem Swing-Weg.

    AWT ist veraltet. Swing ist veraltet (vielleicht weniger, aber in den letzten 10 Jahren wurde nicht viel an Swing gearbeitet). Man könnte argumentieren, dass Swing von Anfang an gut war, aber wir alle wissen, dass der Code verrottet. Dies gilt heute insbesondere für Benutzeroberflächen.

    So bleiben Sie bei SwingX. Nach einer längeren Zeit langsamen Fortschritts die Entwicklung hat sich wieder beschleunigt . Der Hauptnachteil von Swing ist, dass es an einigen alten Ideen festhält, die vor 15 Jahren noch sehr auf dem Vormarsch waren, sich aber heute "ungeschickt" anfühlen. Zum Beispiel unterstützen die Tabellenansichten das Filtern und Sortieren, aber Sie müssen dies noch konfigurieren. Sie müssen eine Menge Code für die Kesselplatte schreiben, um eine anständige Benutzeroberfläche zu erhalten, die sich modern anfühlt.

    Ein weiterer Schwachpunkt ist das Thema. Ab heute gibt es viele Themen. Siehe hier für eine Top 1 . Aber manche sind langsam, manche sind fehlerhaft, manche sind unvollständig. Ich hasse es, wenn ich eine Benutzeroberfläche schreibe und Benutzer sich beschweren, dass etwas für sie nicht funktioniert, weil sie ein seltsames Thema ausgewählt haben.

  3. JGoodies ist eine weitere Schicht auf Swing, wie SwingX. Es versucht Swing angenehmer zu machen. Die Website sieht gut aus. Schauen wir uns das Tutorial an ... hm ... suchen noch ... warte. Es scheint überhaupt keine Dokumentation auf der Website zu geben. Google zur Rettung . Nein, überhaupt keine nützlichen Tutorials.

    Ich bin mir nicht sicher mit einem UI-Framework, das so sehr versucht, die Dokumentation vor potenziellen neuen Fans zu verbergen. Das heißt nicht, dass JGoodies schlecht ist. Ich konnte einfach nichts Gutes dazu sagen, aber es sieht gut aus.

  4. JavaFX. Großartig, stilvoll. Die Unterstützung ist da, aber ich denke, es ist eher ein glänzendes Spielzeug als ein ernstes UI-Framework. Dieses Gefühl beruht auf dem Fehlen komplexer UI-Komponenten wie Baumtabellen. Es gibt eine Webkit-basierte Komponente zum Anzeigen von HTML .

    Als es eingeführt wurde, war mein erster Gedanke "fünf Jahre zu spät". Wenn Ihr Ziel eine nette App für Handys oder Websites ist, ist das gut. Wenn Sie eine professionelle Desktop-Anwendung zum Ziel haben, stellen Sie sicher, dass diese das liefert, was Sie benötigen.

  5. Drehpunkt. Zum ersten Mal habe ich davon gehört. Es ist im Grunde ein neues UI-Framework, das auf Java2D basiert. Also habe ich es gestern ausprobiert. Kein Swing, nur ein bisschen AWT (new Font(...)).

    Mein erster Eindruck war ein schöner. Es gibt eine umfangreiche Dokumentation, die Ihnen den Einstieg erleichtert. Die meisten Beispiele werden mit Live-Demos geliefert (Hinweis: In Ihrem Webbrowser muss Java aktiviert sein. Dies ist ein Sicherheitsrisiko. ) auf der Webseite, sodass Sie den Code und die resultierende Anwendung nebeneinander sehen können.

    Nach meiner Erfahrung steckt mehr Aufwand in Code als in Dokumentation. Beim Betrachten der Pivot-Dokumente muss viel Aufwand in den Code gesteckt worden sein. Beachten Sie, dass derzeit ein Fehler vorliegt, der verhindert, dass einige der Beispiele in Ihrem Browser funktionieren ( PIVOT-858 ).

    Mein zweiter Eindruck von Pivot ist, dass es einfach zu bedienen ist. Wenn ich auf ein Problem stieß, konnte ich es normalerweise schnell lösen, indem ich mir ein Beispiel ansah. Ich vermisse jedoch eine Referenz aller Stile, die jede Komponente unterstützt.

    Wie bei JavaFX fehlen einige übergeordnete Komponenten wie eine Baumtabellenkomponente ( PIVOT-306 ). Ich habe nicht versucht, faul mit der Tabellenansicht zu laden. Mein Eindruck ist, dass, wenn das zugrunde liegende Modell verzögertes Laden verwendet, das ausreicht.

    Vielversprechend. Wenn Sie können, probieren Sie es aus.

80
Aaron Digulla

SWT ist an sich ziemlich einfach und verwendet die nativen Widgets der Plattform über JNI. Es hat überhaupt nichts mit Swing und AWT zu tun. Die Eclipse IDE und alle Eclipse-basierten Rich Client-Anwendungen, wie der Vuze BitTorrent-Client , werden mit SWT erstellt. Wenn Sie Eclipse-Plugins entwickeln, verwenden Sie in der Regel auch SWT.
Ich entwickle seit fast 5 Jahren Eclipse-basierte Anwendungen und Plugins, daher bin ich eindeutig voreingenommen. Ich habe jedoch auch umfangreiche Erfahrung in der Arbeit mit SWT und dem darauf aufbauenden JFace UI Toolkit . Ich habe festgestellt, dass JFace sehr reich und mächtig ist. In manchen Fällen ist dies sogar der Hauptgrund für die Wahl von SWT. Es ermöglicht Ihnen, eine funktionierende Benutzeroberfläche ziemlich schnell einzurichten, solange sie IDE-ähnlich ist (mit Tabellen, Bäumen, systemeigenen Steuerelementen usw.). Natürlich können Sie auch Ihre benutzerdefinierten Steuerelemente integrieren, aber das erfordert zusätzlichen Aufwand.

13
Zsolt Török

Ich möchte ein anderes Framework vorschlagen: Apache Pivot http://pivot.Apache.org/ .

Ich habe es kurz ausprobiert und war beeindruckt von dem, was es als RIA-Framework (Rich Internet Application) ala Flash anbieten kann.

Die Benutzeroberfläche wird mithilfe von Java2D gerendert, wodurch die Auswirkungen von (IMO-, aufgeblähten) Vermächtnissen von Swing und AWT minimiert werden.

11
Augustus Thoo

Eine andere Option ist Qt Jambi . Es hat fast die ganze Größe von Qt (viele Komponenten, gute Dokumentation, einfach zu bedienen), ohne den Aufwand von C++. Ich habe es vor 3-4 Jahren für ein kleines Projekt benutzt, selbst dann war es fast ausgereift.

Vielleicht möchten Sie die Diskussion über Swing vs. Qt hier sehen.

9
nimcap

Swing + SwingX + Miglayout ist meine Kombination der Wahl. Miglayout ist so viel einfacher als Swings 200 verschiedene Layout-Manager und viel leistungsfähiger empfand. Außerdem haben Sie die Möglichkeit, Ihre Layouts zu "debuggen". Dies ist besonders praktisch, wenn Sie komplexe Layouts erstellen.

9
helpermethod

Meine persönliche Meinung: Go for Swing zusammen mit der NetBeans-Plattform.

Wenn Sie erweiterte Komponenten benötigen (mehr als NetBeans bietet), können Sie SwingX problemlos (oder JGoodies) integrieren, da die NetBeans-Plattform vollständig auf Swing basiert.

Ohne eine gute Plattform, die auf dem zugrunde liegenden UI-Framework aufbaut, würde ich keine große Desktop-Anwendung starten (oder eine, die groß sein wird).

Die andere Option ist SWT zusammen mit dem Eclipse RCP, aber es ist schwieriger (wenn auch nicht unmöglich), "reine" Swing-Komponenten in eine solche Anwendung zu integrieren.

Die Lernkurve für die NetBeans-Plattform ist etwas steil (obwohl ich denke, dass dies auch für Eclipse zutrifft), aber es gibt einige gute Bücher, die ich wärmstens empfehlen würde.

sie haben Java Desktop Aplication vergessen, die auf JSR296 als integriertem Swing Framework in NetBeans basiert

mit Ausnahme von AWT und JavaFX basieren alle von Ihnen beschriebenen Frameworks auf Swing. Wenn Sie mit Swing beginnen, werden Sie alle diese Swing-Frameworks (Based Frameworks) (klar) verstehen.

ATW, SWT (Eclipse), Java Desktop-Anwendung (Netbeans), SwingX, JGoodies

alle Frameworks (ich weiß nicht mehr über JGoodies) inkl. JavaFX hat noch lange keine Fortschritte gemacht, viele Swing-basierte Frameworks werden gestoppt, wenn nicht sogar ohne die neueste Version

nur aus meiner Sicht - das beste von ihnen ist SwingX, erfordert aber tiefes Wissen über Swing,

Look and Feel für Swing-basierte Frameworks

4
mKorbel

Ich würde mit Swing gehen. Für das Layout würde ich JGoodies Formularlayout verwenden. Es lohnt sich, das Whitepaper zum Formularlayout hier zu lesen - http://www.jgoodies.com/freeware/forms/

Auch wenn Sie mit der Entwicklung einer riesigen Desktop-Anwendung beginnen möchten, benötigen Sie auf jeden Fall ein Framework. Andere haben auf das Netbeans-Framework hingewiesen. Ich mochte es nicht sehr, also schrieb ich ein neues, das wir jetzt in meiner Firma verwenden. Ich habe es auf sourceforge gestellt, aber nicht die Zeit gefunden, es viel zu dokumentieren. Hier ist der Link zum Durchsuchen des Codes:

http://swingobj.svn.sourceforge.net/viewvc/swingobj/

Das Schaufenster sollte Ihnen zeigen, wie Sie sich einfach anmelden können.

Lassen Sie mich wissen, wenn Sie Fragen dazu haben, ich könnte helfen.

3
sethu

Ich bin sehr zufrieden mit Swing für die Desktop-Anwendungen, an denen ich beteiligt war. Ich teile jedoch Ihre Ansicht, dass Swing keine erweiterten Komponenten anbietet. In diesen Fällen habe ich JIDE gewählt. Es ist nicht kostenlos, aber auch nicht so teuer, und es gibt Ihnen viel mehr Werkzeuge unter Ihrem Gürtel. Insbesondere bieten sie einen filterbaren TreeTable an.

3
sbrattla