Es gibt ziemlich viele GUI-Frameworks für Java, aber was wird als heutiges 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 lose definierte Reihe von Fragen, aber ich denke immer noch, dass es für jeden wertvoll ist, der daran denkt, reichhaltige GUI-Anwendungen zu erstellen.
Ist das Fundament des Swings, 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.
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 jedoch zum bevorzugten Framework für die Erstellung neuer Anwendungen. Swing hat viele reichhaltige Komponenten, fehlt aber in einigen Bereichen noch. Ein Beispiel ist, dass es keine voll funktionsfähige TreeTable-Komponente gibt, die sortieren und filtern / suchen kann.
Von IBM für Eclipse entwickelt, schienen sie zu glauben, dass Swing zu diesem Zeitpunkt nicht für Eclipse geeignet war. An sich ist es ziemlich einfach und verwendet 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 erweiterte Komponenten wie eine TreeTable. (aber ich glaube nicht, dass sie das sofortige Sortieren und Filtern unterstützen). SWT verwendet einige native Bindungen (über JNI?) Und im Internet heißt es, dass dieses Framework in heutigen Projekten nicht verwendet werden sollte. (warum nicht?)
Basierend auf Swing und seiner Mission ist es, reichhaltige Komponenten für den Swing zu erstellen. Noch in der Entwicklung. (allerdings nicht sehr aktiv.) Haben Sie einen sehr schönen Satz von Komponenten, wie zum Beispiel TreeTable. Aber die TreeTable unterstützt, soweit ich weiß, das Filtern und Sortieren nicht. Es unterstützt jedoch die Suche mit Hervorhebung.
Beachten Sie, dass SwingX Komponenten (AFAIU) sind, die Erweiterungen oder Zusammensetzungen vorhandener Swing-Komponenten sind
JGoodies
Ein Rahmen, von dem ich nichts weiß ... Was sind seine Stärken und Schwächen? Was unterscheidet Jgoodies von den anderen?
Bei JGoodies OTOH geht es um PLAFs und Layouts.
Das neueste Flaggschiff von Java / Oracle. verspricht, der Facto-Standard bei der Entwicklung umfangreicher Desktop- oder Webanwendungen zu sein.
Es rendert die Benutzeroberfläche mit Java2D und minimiert so die Auswirkungen von (IMO, aufgeblähten) Hinterlassenschaften von Swing und AWT. (@Augustus Thoo)
Das Hauptaugenmerk scheint auf RIA (Rich Internet Applications) zu liegen, aber es scheint auch auf Desktop-Anwendungen angewendet werden zu können. 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
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.
Also, um zu versuchen, ein bisschen zusammenzufassen, was ich frage:
Angenommen, ich wollte heute eine Desktop-Anwendung in Java erstellen, die viele erweiterte Komponenten enthält. 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 zum Erstellen von Java-GUI-Anwendungen?
Ich könnte es bereuen, dies gefragt zu haben, aber ich werde es trotzdem versuchen:
C # /. Net soll einen sehr guten Satz einfach zu bedienender Komponenten haben, die in jede mögliche Richtung 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 dieselben GUI-Komponenten?
Ist es nur so, dass Java seine GUI-Komponenten auf einer viel niedrigeren Ebene basiert und es möglich ist, all diese fortgeschrittenen Komponenten zu schreiben, nach denen ich suche, aber Sie müssen viel tun, wenn nicht die ganze Arbeit selbst?
Antworten:
Entscheidungsbaum:
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 verpacken?
Hier erfahren Sie, wie Sie dies für SWT tun .
Wenn Sie hier die Wahl haben, sollten Sie Qt 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 Ihnen viele wichtige UI-Komponenten oder sehr wichtige Funktionen von UI-Komponenten (wie das Filtern nach Tabellen).
Wenn SWT eine Funktion fehlt, die Sie benötigen, ist das Framework etwas feindlich gegenüber einer Erweiterung. Sie können beispielsweise keine Klasse darin erweitern (die Klassen sind nicht endgültig, sie lösen nur Ausnahmen aus, wenn das Paket von
this.getClass()
nicht vorhanden ist,org.eclipse.swt
und Sie können diesem Paket keine neuen Klassen hinzufügen, da es signiert ist).Wenn Sie eine native, reine Java-Lösung benötigen, haben Sie den 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 anfangs gut war, aber wir alle wissen, dass Code verrottet. Dies gilt insbesondere für Benutzeroberflächen von heute.
Das lässt Sie mit SwingX. Nach einer längeren Zeit langsamer Fortschritte hat sich die Entwicklung wieder beschleunigt . Der Hauptnachteil von Swing ist, dass es an einigen alten Ideen festhält, die vor 15 Jahren sehr blutig waren, sich aber heute "ungeschickt" anfühlen. Beispielsweise unterstützen die Tabellenansichten das Filtern und Sortieren, Sie müssen dies jedoch noch konfigurieren. Sie müssen viel Code für die Kesselplatte schreiben, um eine anständige Benutzeroberfläche zu erhalten, die sich modern anfühlt.
Ein weiterer schwacher Bereich ist das Thema. Ab heute gibt es viele Themen. Hier finden Sie die Top 10 . Aber manche sind langsam, manche fehlerhaft, manche 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.
JGoodies ist eine weitere Ebene über Swing, wie SwingX. Es versucht, Swing angenehmer zu machen. Die Website sieht gut aus. Schauen wir uns das Tutorial an ... hm ... immer noch auf der Suche ... Moment mal. Es scheint, dass es überhaupt keine Dokumentation auf der Website gibt. Google zur Rettung . Nein, überhaupt keine nützlichen Tutorials.
Ich bin nicht sicher mit einem UI-Framework, das sich so sehr bemüht, die Dokumentation vor potenziellen neuen Fans zu verbergen. Das bedeutet nicht, dass JGoodies schlecht ist. Ich konnte einfach nichts Gutes dazu sagen, aber dass es gut aussieht.
JavaFX. Großartig, stilvoll. 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 schöne App für Telefone oder Websites ist, gut. Wenn Sie eine professionelle Desktop-Anwendung anstreben, stellen Sie sicher, dass diese das liefert, was Sie benötigen.
Pivot. 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 versucht. Kein Swing, nur ein kleines bisschen AWT (
new Font(...)
).Mein erster Eindruck war schön. Es gibt eine umfangreiche Dokumentation, die Ihnen den Einstieg erleichtert. Die meisten Beispiele enthalten Live-Demos (Hinweis: Java muss in Ihrem Webbrowser aktiviert sein; dies ist ein Sicherheitsrisiko ) auf der Webseite, sodass Sie den Code und die resultierende Anwendung nebeneinander sehen können.
Nach meiner Erfahrung geht mehr Aufwand in den Code als in die 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 ( PIVOT-858 ) in Ihrem Browser funktionieren .
Mein zweiter Eindruck von Pivot ist, dass es einfach zu bedienen ist. Wenn ich auf ein Problem stieß, konnte ich es normalerweise schnell anhand eines Beispiels lösen. Mir fehlt 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, mit der Tabellenansicht faul zu laden. Mein Eindruck ist, dass wenn das zugrunde liegende Modell das verzögerte Laden verwendet, das ausreicht.
Vielversprechend. Wenn Sie können, probieren Sie es aus.
quelle
SWT an sich ist ziemlich niedrig 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 mithilfe von SWT erstellt. Wenn Sie Eclipse-Plugins entwickeln, verwenden Sie normalerweise 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 JFace UI Toolkit, die darauf gebaut ist. Ich habe festgestellt, dass JFace sehr reich und mächtig ist. In einigen Fällen kann dies sogar der Hauptgrund für die Wahl von SWT sein. Sie können damit schnell eine funktionierende Benutzeroberfläche erstellen, sofern diese IDE-ähnlich ist (mit Tabellen, Bäumen, nativen Steuerelementen usw.). Natürlich können Sie auch Ihre benutzerdefinierten Steuerelemente integrieren, aber das erfordert zusätzlichen Aufwand.
quelle
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 bieten kann .
Es rendert die Benutzeroberfläche mit Java2D und minimiert so die Auswirkungen von (IMO, aufgeblähten) Hinterlassenschaften von Swing und AWT.
quelle
Swing + SwingX + Miglayout ist meine Kombination. Miglayout ist so viel einfacher als Swings 200 verschiedene Layout-Manager und viel leistungsfähiger. Außerdem haben Sie die Möglichkeit, Ihre Layouts zu "debuggen". Dies ist besonders praktisch, wenn Sie komplexe Layouts erstellen.
quelle
Eine andere Möglichkeit ist die Verwendung von 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 verwendet, selbst dann war es fast ausgereift.
Vielleicht möchten Sie die Diskussion über Swing vs. Qt hier sehen .
quelle
Meine persönliche Meinung: Gehen Sie zusammen mit der NetBeans-Plattform auf Swing.
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.
Ich würde keine große Desktop-Anwendung (oder eine, die groß sein wird) ohne eine gute Plattform starten, die auf dem zugrunde liegenden UI-Framework aufbaut.
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 ist für die NetBeans-Plattform etwas steil (obwohl ich denke, dass dies auch für Eclipse gilt), aber es gibt einige gute Bücher, die ich sehr empfehlen würde.
quelle
Sie haben Java Desktop Aplication basierend auf JSR296 als integriertes Swing Framework in NetBeans vergessen
Mit Ausnahme von AWT und JavaFX basieren alle Ihre beschriebenen Frameworks auf Swing. Wenn Sie mit Swing beginnen, werden Sie (klar) für all diese Swings (Based Frameworks) verstanden.
ATW, SWT (Eclipse), Java Desktop-Anwendung (Netbeans), SwingX, JGoodies
Alle dortigen Frameworks (ich weiß nichts mehr über JGoodies) inkl. JavaFX hat lange keine Fortschritte gemacht, viele Swing-basierte Frameworks werden gestoppt, wenn nicht ohne die neueste Version
Nur meine Ansicht - die beste davon ist SwingX, erfordert aber tiefstes Wissen über Swing.
Look and Feel für Swing-basierte Frameworks
quelle
with same progress
in SWT, SwingX, neuer Besitzer, neue ManiersIch war 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. Was ich in diesen Fällen getan habe, ist JIDE zu wählen. Es ist nicht kostenlos, aber auch nicht so teuer und bietet Ihnen viel mehr Werkzeuge. Insbesondere bieten sie eine filterbare TreeTable.
quelle
Ich würde mit Swing gehen. Für das Layout würde ich das 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. Es hat mir nicht so gut gefallen, also habe ich ein neues geschrieben, 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 tatsächlich eine einfache Anmeldung durchführen.
Lassen Sie mich wissen, wenn Sie Fragen dazu haben, ich könnte helfen.
quelle