# Javafx desktop framework



## Kababär (21. Mrz 2017)

Hi,

ich suche ein gutes framework für Javafx im Desktop-Bereich, das mich bei der Programmierung unterstützt  (Strukturierung, managen von Threads damit die GUI nicht hängt, einfaches Handling von mehreren Controllern und Views,..). 
Hab bis jetzt Jacp und JRebirth auf dem Schirm. Afterburner.fx scheint etwas zu schmal zu sein. 
Könnt ihr eins von beidem empfehlen oder sogar ein ganz anderes framework?


----------



## dzim (23. Mrz 2017)

Hm. Also ich Bau auf pures Java FX auf. Im Mobile Bereich nutze ich Afterburner.fx nur für dependency injection. Im desktop-Bereich dagegen Guice.

Mvvmfx scheint noch recht brauchbar zu sein, allerdings sind mir die Konventionen Teile zu strickt.
Noch strikter ist TornadoFX (Kotlin), das noch eine eigene DSL für GUIs mitbringt.

Allgemein nutzt man Tasks und Services (JavaFX concurrency package) für asynchrone Operationen. Liefern halt callbacks für fertige Arbeiten und so.
CompletableFuture bietet sich wohl auch an für reaktive Programmierung, habe ich aber noch nicht verwendet. Auch rxjava (FX) habe ich noch nicht gebraucht.

Ansonsten lässt sich JavaFX gut mit anderen Technologien vereinen. zB OSGi.

Hab mittlerweile schon wirklich viel damit gemacht, aber Frameworks, abseits der üblichen Verdächtigen... Nein.

Ach Spring Boot bietet sich auch noch an. Wenn man etwas längere Startzeiten akzeptiert.
Frag einfach konkret, was du brauchst, ich Versuch dann mal etwas aus meinem Hirn zu kramen.


----------



## dzim (23. Mrz 2017)

Gerade noch mal jrebirth angeschaut. Stimmt, das habe ich schon eine Weile auf dem Schirm gehabt. Aber leider nie ausprobiert. Tönt ein bisschen wie ein vereinfachtes osgi. Was jetzt nichts schlechtes heißen soll!
Probiere es doch mal aus und gib feedback!

BTW: wenn du Material Design magst: JFoenix... Und wenn es als Quelle für Ideen dient (ich habe mir darauf aufbauend eine lightweight-Dialog-API gebaut).


----------



## Kababär (23. Mrz 2017)

Die meisten "Frameworks" die du aufgelistet hast, habe ich nicht mal gefunden, aber werde mich da mal umsehen. 

OSGi ist mir "noch" kein Begriff und habe ich mir noch nicht angesehen, da es für mein Verständnis in den "EE"-Bereich gehört (korrigier mich, falls ich da falsch liege).

Hauptsächlich suche ich einem Framework, das die Standardschritte automatisiert (also Einbinden von FXML und Controller in anderen Controller-Klassen, Laden von FXML, ..) und es wäre schön, wenn es die Funktionen oder Verwendbarkeit von Controls vereinfacht. *
Bspw*. unterscheidet sich das Füllen einer TableView ja in den seltensten Fällen, wenn man komplette Objekte anzeigen will. Da wäre es z.B. schön, wenn man der TableView einfach das Objekt zuschickt und die TableView die Tabelle selbst aufbaut mit den Spalten, Listener, etc...
Die Steuerung einer TableView finde ich etwas seltsam bzw. nicht intuitiv: Man muss doppelklicken um einen Eintrag zu selektieren und ggf. zu ändern und dann Enter drücken, um die Neuerung zu speichern. Einfacher wäre: einmal klicken -> Eintrag editieren -> Enter oder Linksklick außerhalb der Bounds der Zelle um Eintrag zu speichern.

Und ich weiß zwar nicht, ob es so ein Framework gibt, aber es wäre toll wenn es möglich wäre, den FX-Thread immer am Leben zu erhalten, also dass er nicht einfriert, ohne dass man alles manuell in Background-Tasks abarbeiten lässt bzw. sich selbst um die Tasks oder Threads kümmern muss (Erstellen, warten auf Ergebnis) sondern wenn ich die Methoden einfach annotieren könnte, um zu sagen: "Hey, lass das im Hintergrund laufen..." oder "Mach mal und melde dich wenn du fertig bist".

Im Endeffekt will ich schneller an mein Ziel kommen ohne wirklich "imperativ" zu arbeiten, sondern würde gerne vieles "wrappen". 
Zwar könnte ich mir diese Wrapper gut selbst schreiben, aber das würde relativ viel Zeit kosten und diese fehlt mir tatsächlich etwas. 
Von daher wäre es schön, wenn es so was gäbe, aber wenn nicht, ist es jetzt auch nicht sooo schlimm, dann muss die Projektplanung etwas geändert werden.


----------



## dzim (23. Mrz 2017)

Nein. IMHO gibt es so etwas nicht.
OSGi geht mehr in Richtung Modularisierung. JRebirth wird dir wohl, wie Spring Boot (dass man explizit eben nicht nur für "EE" nutzen muss), Afterburner.fx, mvvmfx und TornadoFX (wo du eben Kotlin lernen musst) nur den Rahmen erstellen.
Bei Kotlin kannst du mit Kotlin 1.1 und dem entsprechenden Flags auch coroutinen schreiben, was einem ermöglicht, mehr oder weniger flüssig, nebenläufigen Kram zu schreiben, ohne explizit Threads etc. zu verwenden. Aber das gilt auch bei Javas internen CompletableFuture und RxJava(FX) - was eben reaktives Programmieren ermöglicht.
Mir ist sonst jedoch nichts genaueres bekannt.


----------



## Kababär (23. Mrz 2017)

Schade. 
Modularisierung brauche ich nicht unbedingt, da das Projekt relativ übersichtlich ist und nur aus zwei "Logikbereichen" besteht. 
Spring Boot ist generell für Webanwendungen, richtig? (Nur damit ich das richtig verstehe)

Ich gucke mir mal CompletableFuture an. 
Und danke dir


----------



## dzim (30. Mrz 2017)

Ich zitier' mich mal selbst


dzim hat gesagt.:


> Spring Boot (dass man explizit eben nicht nur für "EE" nutzen muss)




Wir verwenden Hausintern eine Spring Boot-Anwendung, die in der ersten Iteration eine dauerhaft laufende "Konsolen"-Anwendung ist. Konkret ist sie eine arte "intelligenterer" Cron-Job und scheduled Aufgaben ein, die vorher Hardcoded im crontab standen. Da wir diese Jobs auf 10 Maschienen gleichzeitig machen und sie sich koordinieren sollen, verwenden sie einen Hazelcast-Cluster, dort liegen die Jobs und wer gerade Zeit hat, führt einen aus.

Erst vor kurzen aber fand ich es hilfreich, den einzelenen Instanzen noch einen Web-Server mitzugeben, um sie via ReST-Interface zu überwachen/managen.
Ich hab auch schon JavaFX-Anwendungen damit geschrieben. Spring Boot geht also für alles.


----------



## Kababär (31. Mrz 2017)

Muss mir mal ein paar tutorials zu Spring durchlesen. Das scheint auf den ersten Blick relativ viel zu sein (Spring Boot, MVC, Initializr, etc).

Hazelcast und Cron sagen mir nichts. Mit den Technologien bin ich noch nicht so vertraut. Klingt aber nach einem ExecutorService bzw Thread Pool Manager. Werde mir da gleich bisschen was zu durchlesen.

Denke ich werde das derzeitige Privatprojekt in FX fertig stellen und dann mal versuchen das nach Tomcat und JSF umzuschreiben. Erst mal noch das andere Problem lösen bevor es dann losgehen kann.


----------



## dzim (2. Apr 2017)

Kababär hat gesagt.:


> Denke ich werde das derzeitige Privatprojekt in FX fertig stellen und dann mal versuchen das nach Tomcat und JSF umzuschreiben.


Willst du dir echt eine Web-GUI antun? ;-) Viel Spass dabei! 
Wie gesagt: Spring Boot ist vielseitig und nicht auf Web-Anwendungen beschränkt.
Schau dir vielleicht kurz mein Repository mit ein paar Beispielen an:
https://github.com/bgmf/poc (Alle drehen sich irgendwie im JavaFX)
Vergiss Hazelcast erst einmal. Und Cron muss dir erst dann ein Begriff sein, wenn du mit Linux zu tun hast.


----------



## Kababär (2. Apr 2017)

Ja wir haben gerade das Modul "Verteilte Anwendungen ". Ist super interessant.  Natürlich programmieren wir da alles von Hand. 
Hab mal bisschen weiter vorgeschaut und habe das Gefühl eher ein "Administrator für Config-Files und Herrscher der Annotations" sein zu müssen als wirklich ein Programmierer  

Spring Boot Security ist interessant für mich für die Rollenvergabe innerhalb meiner Anwendung (je nach Rolle sollen gewisse Dinge nicht einsehbar oder gewisse Funktionen verfügbar sein).

Ansonsten wüsste ich mir derzeit Spring Boot nutzen könnte, aber ich schaue mir mal dein Repo an 

Eigentlich mag ich Linux, aber denke wir sind mittlerweile keine Freunde mehr. "Er" hat was gegen meine hardware und so stabil laufen will es auch nicht. Schade eigentlich.
Aber ich kriege jedes System und Programm klein


----------

