# JavaFX Pros und Contras ?



## Major_Sauce (16. Apr 2015)

Guten Abend allerseits,

ich habe gerade mal wieder was mit graphischer Programmierung gemacht und plötzlich stolperte ich über "JavaFX".
Ich habe noch gar nicht gewusst dass eine neue UI entwickelt wird, war also gar nicht up to date und habe mich erst ein mal eingelesen.
Nach etwa einer Stunde hatte ich dann aber die Schnauze voll, da jeder etwas anderes gesagt hat.
Die einen sagen dass alles viel einfacher geworden ist als bei der "alten" Swing programmierung, die anderen schaffen es noch nicht ein mal ein Rechteck auf den Bildschirm zu kritzeln.
Performancetechnisch sieht das ganze genau so aus, desswegen wollte ich mal nach euren Erfahrungen fragen, wie es denn mit JavaFX steht und ob es sich lohnen würde Swing zu verabschieden.
Wichtig ist für mich auf jeden Fall die Performance, da ich oftmals 500 - 1000 Objekte zeichnen muss, und das bei ca 60 fps, das macht mit Swing nicht unbeding viel Spaß :noe:
Wäre schön wenn ihr mir mal eure Meinung dazu sagen könntet.

mfg Major_Sauce


----------



## top_chief (16. Apr 2015)

Hallo, 
vorweg erst mal zu mir, damit du meine Antwort einordnen kannst: 
Bin auch noch ein "Frischling" in JavaFx (seit ca. 10 Tagen programmiere ich jetzt etwa täglich 3-4 Stunden in JavaFx). 
Mit Swing habe ich auch nur ganz elementare Erfahrungen sammeln können. Wobei ich sagen muss, dass mir der Einstieg in Swing etwas leichter viel (in Android und Qt habe ich deutlich mehr Erfahrung), dementsprechend ist die Ui-Programmierung nichts wirklich neues für mich. 

Als ich kürzlich angefangen habe mich für JavaFx zu interessieren, ging es mir ähnlich wie dir... Eingelesen und "hä?!" gedacht. Jeder sagt was anderes und besonders viele gute Beispiele findet man für JavaFx leider nicht. Klar gibt es schon gute Tutorials, aber im direkten Vergleich mit anderen Plattformen geht das was man für JavaFx findet, regelrecht gegen null.
Trotzdem bin ich bei JavaFx geblieben und kann sagen, dass mir folgende Sachen ziemlich gefallen:
-Erstellung von Layouts mittels SceneBuilder
-Verknüpfung von Ui und Daten-Modell via Properties (<- wobei ich hier nach 10 Tagen nur aller erste Gehversuche gemacht habe - kann mir aber vorstellen, dass es eine erhebliche Arbeitsersparnis mit sich bringt, wenn man sich in diesem Thema besser auskennt, als ich derzeit... hier mehr Infos)
-gute Integration in IntelliJ (wohl noch besser in Eclipse bzw. Netbeans - aber ich bin IntelliJ-Fan^^)

Weniger gut gefallen mir ein paar sprachliche "Besonderheiten" (habe es in einem anderen Thread schon mal beschrieben), ich empfinde bspw die Methode "setDisable(boolean);" als nicht unbedingt intuitiv benannt. Davon gibts eine Reihe Fälle, die mich sonst einfache Sachen immer wieder nachschlagen lassen - aber das ist ja nichts Unerwartetes, wenn man sich in eine neue Plattform einarbeitet. 

Fazit: insgesamt bin ich froh, dass ich mich bei meinem aktuellen Projekt für JavaFx entschieden habe und werde es jetzt auch in JavaFx fertigstellen bzw. auch in Zukunft JavaFx weiter nutzen. 

Was mich persönlich _extrem _für die Nutzung von JavaFx bewegt hat, war das "JavaFx Ensemble" schaus dir am besten mal an -> Link. 
Beachte auch, dass der Code zu den Beispielen, in der Anwendung enthalten ist. 

Beste Grüße
Martin


----------



## AntiMuffin (16. Apr 2015)

Hallo,
ich benutze in meinem Aktuellen Projekt auch JavaFX und bin sehr begeistert davon !
Wenn man sich das .NET Framework ansieht ist Swing wie WinForms und JavaFX wie WPF. Ich bin auch davon überzeugt das JavaFX bald mehr im kommen ist, jedoch ist die Tatsache das Firmen meist noch auf Swing setzten... 

Die Vorteile sind folgende:
- Du kannst nun FXML benutzen, was dir erlaubt die Oberfläche mithilfe davon zu gestalten und grenzt diese von Code ab. Der größte Vorteil daran ist das der Code viel übersichtlicher bleibt und man eine Hierachie hat.
- Du hast den Scene Builder. In Swing fand ich ALLE kostenfreien Tools für das Oberflächen Design sehr bescheiden. Der Scene Builder jedoch ist ein Super Tool mitdem du so gut wie alles machen kannst, er wird sogar in die IDE mit eingebunden.
- Du kannst alles mithilfe von CSS designen. 
- ResourcesBundle kann sehr einfach eingebunden und verwendet werden. (Im Scene Builder werden auch gleich die richtigen werte angezeigt)
- Du hast die Möglichkeit des Databindings. Mithilfe von Databinding kannst du dir oft viel unnötigen Code sparen!
- Die Anwendungen sehen Gut aus - Nicht dieser Java Look wie in Swing.
- Bei Verwendung von FXML kann leicht das MVC eingehalten werden.

Gruß,
Kevin


----------



## Major_Sauce (16. Apr 2015)

Heyo, erstmal wollte ich mich für die Antworten bedanken.
Also bisher ist bei mir hängen geblieben dass man auf jeden Fall viel einfacher und mit weniger Aufwand programmieren bzw designen kann.
Noch eine kleine Frage: Gibt es Performance-Verbesserungen ?
Bei Swing regt es mich immer auf dass die GPU nicht anständig benutz wird, es sei denn man benutzt irgendwelche Bindings, JOGL oder so nen Mist.
Hat sich das bei javaFx mittlerweile verbessert ?

mfg Major


----------



## top_chief (16. Apr 2015)

Gute Frage.. 
Vielleicht hilft dir das weiter?


----------



## dzim (17. Apr 2015)

Soweit ich weiss, wird die Darstellung von JavaFX, sofern verfügbar, via OpenGL vorgenommen. Ich habe für meine Arbeit eine mit Animationen schon fast überfrachtete Speed Test Anwendung gechrieben. Was mir dabei aufgefallen ist:

- CSS zum Stylen anstelle von Look-&-Feels ist deutlich einfacher und schneller - auch wenn die CSS-Referenz von Oracle etwas kryptisch ist und ich mich meistens auf das im JDK vorhandene modena.css verlassen habe
- Declarytive UIs - wie schon die Vorposter geschrieben haben, ist das gerade für die Trennung von UI und Code sehr hilfreich - seit Android möchte ich auch nicht anders
- separater UI Thread (der Hauptthread) - kenn ich bereits in der Form von SWT und Android, daher nichts neues für mich und nur Fleissarbeit, schön rechenintensive Arbeiten vom UI-Thread zu separaieren - das man hier *Platform#runLater* verwenden muss, ist mir dann recht schnell klar 

Weniger schön finde ich, das die Performance unterschiedlich ausfallen kann:
Windows: Top!
Linux: Es läuft zwar performant, aber geht ganz schön auf die CPU - weiss nicht, ob ich hier mit den Graphik-Treibern noch irgendetwas falsch gemacht habe, sodass der Software-Renderer-Fallback verwendet wird (hab halt nen schnelles Notbook, da stört es nicht so).
Mac OSX: Habe ich selbst nicht, der Kollege mit einem hat bisher aber noch nichts bemängelt.

Besonderes Schmankerl:
Aktive Community! Custom Controls via *ControlsFX* oder *jfxtras*. 
Und zu guter letzt: *RoboVM* und *javafxports* habe JavaFX fit für  Android und iOS gemacht. Suche nach *javafxports* und du wirst fündig. Gerade Android ist noch etwas wackelig (ich bekomme eine Test-Anwendung auf dem Nexus 5 hin, aber nicht auf meinem Nexus 6 - andere OpenGL ES Version (3.1, statt 3.0). Aber auch hier tut sich viel und ich sehe es als bessere Cross-Platform-Lösung (wenn man nur Android und iOS möchte) als *Phonegap* oder *Cordova*. Einzige IMHO weitere plausible Variante ist das gerade in Entwicklung befindliche *Tabris.js*.


----------



## Major_Sauce (17. Apr 2015)

Seht schön, danke @all, top_chief genau so was habe ich gesucht 
Ich werds mir jetzt auf jeden Fall mal anschauen, danach erstatte ich mal Bericht wie es gelaufen ist.

Danke an alle die geantwortet haben.

mfg Major


----------

