# Mit JavaFX angefangen. Lohnt sich Swing?



## Kababär (10. Jul 2016)

Hi,

an der FH haben wir JavaFX gelernt bzw. einen kleinen Einstieg.
Vorher kannte ich AWT und Swing nicht und zähle, wenn es um GUI-Programmierung in Java geht, eigentlich auch nicht mehr dazu als die drei (sind die mir bekanntesten. Habe noch nie gehört, dass jemand etwas anderes programmiert hat).
Von Swing weiß ich bis jetzt, dass die Oberfläche sich dem jeweiligen OS anpasst bzw. für die Oberfläche OS-eigene Komponenten verwendet werden und dass Swing, historisch bedingt, mehr Implmentierungen hat, die es in JavaFX nicht gibt.
Aus Stackoverflow weiß ich, dass derzeit immer noch, aber langsam an Swing gearbeitet wird. Oracle hat JavaFX aus der Hand gegeben und wird nun von einer Community "weiterentwickelt".
Also sitze ich gerade etwas im Zwiespalt, da ich mich quasi mittlerweile recht gut mit JavaFX zurechtgefunden habe, (denke, dass ein Umstieg auf Swing nicht sonderlich schwer sein wird), aber ich nicht weiß wie es um die Zukunft der zwei Frameworks steht.

Viele sind der Meinung, dass JavaFX für kleine Projekte recht gut und schnell zum Ziel führt, Swing aber deutlich "seriöser" sei als JavaFX und JavaFx im Prinzip nichts weiter als ein Baukasten für Kinder.

In Netbeans habe ich kürzlich eine Swing UI erstellt (Plugin ist schon in Netbeans erhalten; Swing Builder) und im Prinzip hat man dort nur keine FXML, sondern (wie man es in JavaFX auch machen kann) alles "händisch" als Java Code.

Ich würde gerne eure Meinung hören, von denen, die sich schon intensiv mit beiden Frameworks beschäftigt haben.
Was benutzt ihr? Benutzt ihr immer das gleiche Framework oder kommt es auf die App an (falls ja, bei welchen Apps benutzt ihr welches Framework?)
Kann man irgendwo sehen, welche Projekte der Frameworks laufen oder kommen?
Kann man sich sicher, sein, wie bei Ubuntu LTS Systemen, welche Frameworks lange supported (weiterentwickelt) werden?
ich würde gerne etwas mehr Sicherheit haben, wenn ich mich für ein Framework entscheide..


----------



## KeVoZ_ (10. Jul 2016)

Nimm doch das, mit dem du sicher und komfortabel ans Ziel kommst.

Wenn du mit JavaFX gut zurecht kommst und alle deine geschrieben Programme zum laufen bekommst, und es am Ende auch noch schick aussieht, dann bau dich doch in diesem Framework weiter aus


----------



## AndyJ (11. Jul 2016)

Ich habe lange Zeit mit Swing gearbeitet und war eigentlich ganz zufrieden. Dummerweise hat bereits Sun die Weiterentwicklung ziemlich schleifen lassen und Oracle hat Swing ganz aufgegeben (mit Hinweis auf JavaFX). Mit JavaFX arbeite ich nun etwa zwei Jahre professionell und dass ich damit unzufrieden bin, waere mehr als nur Schoengeredet. Der Code ist unvollstaendig, das Design eine Katastrophe und voller Bugs ist das ganze auch noch. Mit JavaFX werden wohl hauptsaechlich Webentwickler angesprochen, die API hat eine Menge von html5, css, etc.. Oracle hat allerdings den Support fuer JavaFX aufgegeben wie es scheint, der FX Window Builder ist z.B. ganz eingestellt worden und Oracle verwendet fuer die eigenen Produkte immer noch Swing. Also bleibt nur noch SWT. SWT ist aeusserst schlank, gut strukturiert und designed. Ich habe damit so weit nur eine groessere Anwendung geschrieben, aber ich kann jetzt schon sagen, dass das mein Favorit ist. Und vermutlich wohl auch das einzige Toolkit, das eine Zukunft hat, da die Eclipse Foundatiuon dahinter steht. Einfach mal ausprobieren: https://www.eclipse.org/swt/
Anders als Swing, dass die OS widgets nur nachbaut, sind es bei SWT die originalen Widgets, mit einem Java Wrapper drumrum. Daher ist SWT erheblich naeher am OS und macht z.B. auch Themenchanges mit.
Cheers,
Andy


----------



## nvidia (11. Jul 2016)

AndyJ hat gesagt.:


> [...] Oracle hat allerdings den Support fuer JavaFX aufgegeben wie es scheint, der FX Window Builder ist z.B. ganz eingestellt worden [...]


http://www.ijug.eu/home-ijug/aktuel...n-oracle-ein-klares-bekenntnis-zu-javafx.html

Zitat von Don Smith: "We continue to recommend JavaFX for application developers building rich clients.  As of 8u40, JavaFX added support for assistive technologies making it therefore the recommended UI framework for accessibility applications."

Ich habe bei einigen Problemen mit JavaFX festgestellt das es in dem Sinne keine Bugs sind sondern es einfach keine gute Beschreibung oder Richtlinien gibt wie man mit dem Krempel vernünftig umzugehen hat.


----------



## Kababär (11. Jul 2016)

Naja 8u40 ist jetzt auch schon ein Weilchen her.
Also derzeit bin ich dann doch schon eher von Swing (nicht SWT, weiß nicht, aber das scheint mir zu spezifisch und wie steht es da um die Dokumentation? Habe für Eclipse ein paar Tutorials gesehen, aber ich finde AWT, Swing und JavaFX sind die "offizielen" GUI-Kits) überzeugt. 
Dort kann man auch bindings, properties und haufenweise Listener erstellen. Also nichts, was man in JavaFX nicht auch machen könnte, oder?
Als wirklicher Unterschied habe ich gelesen, dass das Zeichnen in Swing im Gegensatz zu JavaFX nicht pixelgenau funktioniert, stimmt das?


----------



## Neumi5694 (14. Jul 2016)

Ich bin aktuelle noch eher mit Swing unterwegs.
JavaFX ist zu bevorzugen, wenn du spartanische Oberflächen verwendest, eventuell auch mobile Anwendungen implementieren willst. Swing ist für native Anwendungen immer noch deutlich angenehmer.
Mit JavaFX trennst du Logik von Aussehen. Wenn du die UI anpassen willst, brauchst du die Controller nicht anzufassen und musst nicht neu kompilieren.
Das kannst du natürlich auch mit den anderen machen, aber JavaFX zwingt dich fast schon dazu.

Ich konnte mich bisher nicht wirklich für FX erwärmen, meine UIs sind flexibel, passen sich an, das ist in FX ein deutlich höherer Aufwand.

Was verstehst du unter "pixelgenau"? Wenn du die Größe von Buttons usw. manuell festlegst, dann werden die auch genau so groß. Wie groß der Text im Inneren wird und / oder wie groß die Abstände zwischen Text und Buttonrand sind, kannst du ebenfalls festlegen. Das alles solltest du aber tunlichst vermeiden, wenn es keinen triftigen Grund gibt. Überlass die genauen Größen LayoutManagern (meine meistverwendeten sind GridbagLayout, BorderLayout und - zeilenweise -  FlowLayout) und Look&Feels, damit dir nicht die halbe Zeit Texte abgeschnitten werden, weil du die Komponente zu klein eingestellt hast.


----------



## Flown (14. Jul 2016)

Neumi5694 hat gesagt.:


> JavaFX ist zu bevorzugen, wenn du spartanische Oberflächen verwendest, eventuell auch mobile Anwendungen implementieren willst. Swing ist für native Anwendungen immer noch deutlich angenehmer.


Auf welcher Grundlage sind diese Aussagen begründet? Hast du schon mal durchgestylte FX-Oberflächen gesehen? Swing nativer als FX?


Neumi5694 hat gesagt.:


> Mit JavaFX trennst du Logik von Aussehen. ..... aber JavaFX zwingt dich fast schon dazu.


Naja JavaFX ist nun mal ein MVVM Framework und du wirst zu gar nichts gezwungen, da du programmatisch auch deine UI (wie in Swing/AWT) zusammenstellen kannst.


----------



## Neumi5694 (14. Jul 2016)

Ok, dann wird man freundlich in die Richtung geschoben. Jedenfalls gerät man weniger leicht in Versuchung, Programmlogik in den UI Controller einzubauen.


Und was die FX-UIs angeht ... nein, da sind mir noch keine untergekommen.
Wenn ich mal welche sehe, dann nehm ich meine Aussage zurück.


----------



## Flown (14. Jul 2016)

In meiner alten Firma haben wir ein paar nette Sachen mit JavaFX gebastelt, die auf Tablets für die Produktionssteuerung zuständig waren. Doch HIER gibts ein paar kommerzielle Sachen mit FX.


----------



## AndyJ (15. Jul 2016)

Kababär hat gesagt.:


> Naja 8u40 ist jetzt auch schon ein Weilchen her.
> Also derzeit bin ich dann doch schon eher von Swing (nicht SWT, weiß nicht, aber das scheint mir zu spezifisch und wie steht es da um die Dokumentation? Habe für Eclipse ein paar Tutorials gesehen, aber ich finde AWT, Swing und JavaFX sind die "offizielen" GUI-Kits) überzeugt.
> Dort kann man auch bindings, properties und haufenweise Listener erstellen. Also nichts, was man in JavaFX nicht auch machen könnte, oder?
> Als wirklicher Unterschied habe ich gelesen, dass das Zeichnen in Swing im Gegensatz zu JavaFX nicht pixelgenau funktioniert, stimmt das?



Howdy Kababär,
die Documentation ist da: https://www.eclipse.org/swt/
Klick auf die Buttons "Widgets" und "Snippets". Das Eclipse Tutorial ist als Einstieg weniger geeignet, weil da viel mehr abgehandelt wird, vornehmlich Plugin-Development. Ausserdem benutzt Eclipse auch noch JFaces, ein Framework on Top of SWT und da muss man dann doch zu viel auf einmal lernen.
SWT alleine ist sehr einfach zu verwenden. Man muss halt eine Library zu seinem Project packen, aber das macht man doch fuer viele andere Dinge auch.
Swing ist sicher ganz OK, aber leider hat es keine Zukunft mehr. So gesehen macht es keinen Sinn sich damit weiter zu beschaeftigen.
Cheers,
Andy


----------



## Kababär (16. Jul 2016)

Da ich aber Netbeans verwende, ist SWT allerdings auch raus.


----------



## Meniskusschaden (16. Jul 2016)

Habe es zwar nicht ausprobiert, aber man wird die SWT-Bibliotheken doch bestimmt auch ganz normal in Netbeans einbinden können.


----------



## Kababär (16. Jul 2016)

Naja hab mal bisschen und lese überall nur Eclipse. Fast genau so schlimm wie mit Wildfly. Da findet man hauptsächlich auch nur Sachen für Eclipse.
Dieser Hype


----------



## Meniskusschaden (16. Jul 2016)

Nach SWT zu suchen und sich daran zu stören, dass man dabei auf Eclipse stösst ist ja ein wenig so, als wolle man sich beispielsweise über den Passat informieren, dabei aber keinesfalls etwas über VW lesen. Ich glaube mit Hype hat das nichts zu tun, sondern liegt in der Natur der Sache.

Ich würde lieber prüfen, welches Framework meine Anforderungen am besten erfüllt und danach entscheiden. Glaube nicht, dass Nutzer anderer IDEs bei SWT Nachteile gegenüber Eclipse-Usern haben. Die müssen SWT genauso einbinden, wenn sie es nutzen möchten.


----------



## tryn4x (13. Mai 2021)

AndyJ hat gesagt.:


> ....... Mit JavaFX arbeite ich nun etwa zwei Jahre professionell und dass ich damit unzufrieden bin, waere mehr als nur Schoengeredet. Der Code ist unvollstaendig, das Design eine Katastrophe und voller Bugs ist das ganze auch noch........
> Cheers,
> Andy


Hallo. 
Es ist schon eine Weile her aber ist es mit Javafx immer noch so kompliziert oder hat sich die Lage verbessert. 
Ich bin leider ziemlich unschlüssig ob ich swing oder Javafx nutzen soll. 

Danke im voraus. 
Grüzze.


----------



## Gelöschtes Mitglied 65838 (13. Mai 2021)

> JavaFX ist zu bevorzugen, wenn du spartanische Oberflächen verwendest,


also das ist schlichtweg falsch

Javafx hat 3D du kannst sogar deine 2d Anwendung in 3D darstellen


du kannst sogar die komplette GUI anmalen wie du willst und effekte und sonst was machen... man muss es halt machen ohne style sieht alles spartanisch aus egal ob swing awt oder fx

und selbst dann wenn das nicht reicht, kannst du auch FXGL benutzen


----------



## Gelöschtes Mitglied 65838 (13. Mai 2021)

> MVVM Framework und du wirst zu gar nichts gezwungen, da du programmatisch auch deine UI (wie in Swing/AWT) zusammenstellen kannst.


der MVVM ist ein "Model" also eine Richtlinie wie man ein Programm aufbauen KANN , dazu gezwungen ist man überhaupt nicht du kannst deine GUI mit FXML zusammenbauen xml oder als Code im Programm wenn du deine Ganze GUI in 1 Klasse stecken willst und keine markup language benutzt werden sollte dann geht das auch


----------



## mrBrown (13. Mai 2021)

Ihr treibt euch Nachts auch gern auf Friedhöfen rum, oder?



tryn4x hat gesagt.:


> Es ist schon eine Weile her aber ist es mit Javafx immer noch so kompliziert oder hat sich die Lage verbessert.
> Ich bin leider ziemlich unschlüssig ob ich swing oder Javafx nutzen soll.


Kompliziert liegt immer im Auge des Betrachters, seit Java 8 hat sich aber an den Grundlagen nicht wirklich was geändert.
Ich persönlich würde aber auf JavaFX setzen.



Joreyk hat gesagt.:


> der MVVM ist ein "Model" also eine Richtlinie wie man ein Programm aufbauen KANN , dazu gezwungen ist man überhaupt nicht du kannst deine GUI mit FXML zusammenbauen xml oder als Code im Programm wenn du deine Ganze GUI in 1 Klasse stecken willst und keine markup language benutzt werden sollte dann geht das auch


Auch wenn MVVM nur ein Pattern ist, ist JavaFX schon mit Kern daran angelehnt, z.B. in Form von Bindings.


----------



## lam_tr (13. Mai 2021)

Ich bin auch eher für JavaFX weil es zum Einen immer noch fortlaufen von der Community weiterentwickelt wird. Es ist Cross Platformfähig. hier sind ein paar Beispiele direkt als Webanwendung






						JavaFX-Ensemble
					

JavaFX-Ensemble




					www.jfx-ensemble.com
				




Weiter gibt es hier ein Video von Dirk Lemmermann mit professionieler Aufstellung einer JavaFX für ein Energieunternehmen in UK. Ist meiner Meinung nach sehr sehenswert.





Ein großes Plus für JavaFX ist, man kann die Oberfläche als XML beschreiben und die Controls lassen sich sehr gut mit Databinding arbeiten. Ich kann jetzt nicht viel für Swing reden, ich mein Swing hat von Haus aus kein Databinding aber in SWT war das sehr mühselig.

JavaFX enthält weiter noch eine Chart API, was auch ziemlich cool ist.

Das Designen der UI über SceneBuilder ist so konfortable, man muss nicht mehr viel Code für die UI schreiben.

Mit JPRO Plugin lässt die Anwendung eins zu eins auf Webanwendung portieren. Ich habe an der Stelle noch nicht ausgiebig getestet, aber für meine kleine Anwendungen hat das super geklappt.

Mit JavaFXPort (veraltet), mittlerweile Gluon Mobile, lässt sich JavaFX auf Mobilen Geräten laufen.


----------



## Gelöschtes Mitglied 65838 (13. Mai 2021)

was es aber noch zum anmerken gibt...du kannst in javafx auch swing elemente benutzen (musst du halt konfigurieren) falls es was in swing gibt worauf du nicht verzichten möchtest


Embedding Swing Content in JavaFX Applications | JavaFX 8 Tutorials and Documentation (oracle.com)

anscheinend geht das auch umgekehrt


----------



## lam_tr (13. Mai 2021)

Joreyk hat gesagt.:


> was es aber noch zum anmerken gibt...du kannst in javafx auch swing elemente benutzen (musst du halt konfigurieren) falls es was in swing gibt worauf du nicht verzichten möchtest
> 
> 
> Embedding Swing Content in JavaFX Applications | JavaFX 8 Tutorials and Documentation (oracle.com)
> ...


Ja theoretisch geht es schon, aber an sich würde ich eher das Control komplett neu bauen anstatt sie in JavaFX wiederzuverwenden. Ich habe die Operabilität mit SWT versucht, ging auch, aber es war im allgemeinen sehr leaky.


----------



## Gelöschtes Mitglied 65838 (13. Mai 2021)

> Ihr treibt euch Nachts auch gern auf Friedhöfen rum, oder?


woher weist du das 👻


----------



## mrBrown (13. Mai 2021)

Joreyk hat gesagt.:


> woher weist du das 👻


Na du bist offensichtlich nekrophil, sonst hättest du nicht auf Jahre alte Beiträge geantwortet 

(Und bitte korrekt zitieren, das macht es für alle angenehmer  )


----------



## mihe7 (13. Mai 2021)

mrBrown hat gesagt.:


> Ihr treibt euch Nachts auch gern auf Friedhöfen rum, oder?





Joreyk hat gesagt.:


> woher weist du das 👻





mrBrown hat gesagt.:


> Na du bist offensichtlich nekrophil


Wo bin ich hier gelandet


----------



## Trjavnamen (13. Mai 2021)

Och wollte einen Kommentar abgeben. Dazu müsste ich aber erst Swing probieren. Als Anfänger ist Javafx etwas klarer. Java Swing ist etwas komplizierter aber je mehr ich über Methoden und Vererbung verstehe erscheint es mir leichter Swing zu lernen.  Der Designer ist wie Scenebuilder Die Komponenten die man dort auf die Fläche zieht werden in der KLasse angezeigt wo man sie benennen kann.  Die Events die man in Scenebuilder direkt sehen kann sind blind per Hand anzulegen. Also nach dem Schema  Name.xxxxxx. Das Befüllen und die Behandlungen von arrays sind leichter gestaltet. Ich habe den Eindruck das es  bei Fx um eine einfachere Oberfläche zum steuern von Geräten handelt also einfache IO befehle und festgesetzte Maschienenschritte (abläufe)ideal ist.  Oder zur indirekter übergabe an SQL bzw DBase Datenbanken geeignet sind. Aber bei Tabellen mit mehr als 12 Berechnungen an seine Grenzen stößt.


----------



## kneitzel (13. Mai 2021)

Also Swing ist deutlich einfacher zu lernen, weil es auch einfach von Hause aus vieles nicht bietet:
- Binding fehlt.
- Deklarative Oberflächen: Also statt mit Java Code schreibt man eine FXML Datei, die dann gelesen wird. 
- Stylesheets (Also z.B. eine einfache Anpassung an ein spezielles Design ohne Code anpassen zu müssen)

Bei Swing kann man da zwar das eine oder andere auch in Form von zusätzlichen Libraries finden, aber da konnte sich aus meiner Sicht nichts wirklich durchsetzen.


----------



## dzim (14. Mai 2021)

Also ich sag's mal so: Ich hab kürzlich unsere mittlerweile doch recht umfangreiche Desktop-App mal nativ kompiliert (erst mal nur auf meinem Linux-Dev-System, aber immerhin). War ein bisschen Arbeit, aber mit JavaFX bekommt man dann ne schnuckelige und schnell startende Anwendung (ok, die Startzeit musste ich dann mit UPX wieder etwas kaputt machen, aber die grösse der App von ~240 MB auf ~70 MB zu reduzieren, war es mir Wert).
Das man also in dem Bezug mit der Zeit gehen kann, ist IMHO die richtige Wahl gewesen.

Da Swing im Moment nicht mal für Desktops vollumfänglich für native Builds parat ist (ganz zu schweigen von Mobile), ist das für mich also ein No-Brainer. Und bevor ich in Swing einen Look & Feel erstelle, style ich meine JavaFX-App dann doch lieber schnell mit CSS um.


----------



## Oneixee5 (14. Mai 2021)

Ich finde die Diskussion geht am wahren Problem vorbei. Die Zeit nativer Desktopanwendungen ist einfach vorbei. Es gibt noch eine Nische bei einigen Business-Anwendungen und noch bei IDE's aber ansonsten gilt "mobile first" - das bedeutet Apps und Webseiten die für Mobilgeräte optimiert sind. Die logische Folge sind plattformunabhängige Webapps für Desktop und Office. Sich mit Desktopanwendungen zu beschäftigen ist durchaus richtig, da es noch lange irgendwelche legace Systeme geben wird. Will man aber legace Systeme betreuen, muss man entweder mit allen Arten von Desktopanwendungen klar kommen oder man spezialisiert sich auf die, welche in der aktuellen Umgebung zum Einsatz kommen. IMHO: sollte man von möglichen Systemen schon mal was gesehen haben und mindestens wissen wo man Hilfe findet. Es ist egal wo man anfängt, ein guter Punkt sind eigene Interessen und das Umfeld.


----------



## mihe7 (14. Mai 2021)

Als jemand, der gerne Swing nutzt(e), muss ich sagen: Swing ist im Wesentlichen tot. Das gilt aber für immer mehr, was traditionellerweise auf dem Desktop lief, unabhängig von Sprache und Framework (s. @Oneixee5). Wir reden also zunehmend von Nischen und da kann und muss man sich aussuchen, was am besten geeignet ist, die Anforderungen umzusetzen.

Wir haben z. B. noch eine Java 7 Swing-Anwendung, die auf der NetBeans Platform basiert und deren UI-Kernfunktionalität nahezu ausschließlich auf eigenen Komponenten basiert. Sowas möchte ich nicht auf FX umstellen müssen, wobei die Betonung auf "müssen" liegt. Spaßeshalber wäre es mal ganz interessant, wie kompliziert das wirklich wäre. Hm, wenn ich mal sonst nix zu tun habe...


----------

