# Wie in Java FX einsteigen und Tutorials dazu?



## ernst (27. Okt 2014)

Hallo Gemeinde,
Ich arbeite mit der Entwicklungsumgebung Netbeans.
Bis jetzt habe ich grafische Oberflächen in Java mit swing von Hand programmiert.
Das ist sehr aufwändig.
Habe gehört, daß man grafische Oberflächen (und Animationen) mit Java FX erstellen kann.
Da es sehr aufwändig ist, die grafische Oberfläche manuell zu programieren, wäre es mir am liebsten, wenn man dies mit einem Designer machen kann (dazu braucht man keine Ahnung vom Programmieren).
Der von dem Designer erstellte Quellcode interessiert mich nicht, sondern ich erstelle dann nur noch irgendwelche selbst programmieretn Fachklassen wie z.B. Auto, LKW, Fahrzeug
und binde diese in den vom Designer erstellten Quellcode ein.
Ist dies möglich und wie ist dies möglich?
Gibt es dazu ein Tutorial in Deutsch ?
Welche Netbeans-Version ist dabei zu empfehlen und welche JDK/JRE soll ich nehmen?


mfg
Ernst


----------



## Joose (27. Okt 2014)

ernst hat gesagt.:


> Das ist sehr aufwändig.



Aber du weißt wo im Code welche Element erzeugt wird und wie der Code funktioniert.



ernst hat gesagt.:


> Habe gehört, daß man grafische Oberflächen (und Animationen) mit Java FX erstellen kann.



Ja JavaFX soll die Trennung zwischen UI-"Code" und eigentlichen Code noch besser hervorheben.



ernst hat gesagt.:


> ..... (dazu braucht man keine Ahnung vom Programmieren).



Und somit weiß man auch nicht wie man diesen Code im Notfall per Hand nachbesserst.



ernst hat gesagt.:


> Der von dem Designer erstellte Quellcode interessiert mich nicht, ...



Sollte dich aber interessieren, vor allem am Anfang wenn du davor noch nie einen Designer benutzt hast.



ernst hat gesagt.:


> Ist dies möglich und wie ist dies möglich?
> Gibt es dazu ein Tutorial in Deutsch ?
> Welche Netbeans-Version ist dabei zu empfehlen und welche JDK/JRE soll ich nehmen?



JavaFX ist in Java 7 integriert, bei Java 6 gibt es eine Standalone Version für JavaFX (nur Windows).
Suche am Besten einfachmal raus welche Designer es gibt für Netbeans, und dann probiere sie aus. DU musst mit dem Designer zurecht kommen 

Ich würde dir auch ans Herz legen, dich mit dem generierten Code auseinanderzusetzen. Es gibt sicher auch mal Situationen in denen du vielleicht dochmal nachbesser musst bzw. welche per Designer nicht machbar sind (dynamischer Aufbaue eines UI).


----------



## knilch (27. Okt 2014)

Hi,


> Der von dem Designer erstellte Quellcode interessiert mich nicht


Das ist schon mal eine schlechte Einstellung. JavaFX != Swing. Es ist  besser wenn du dich damit auseinander setzt, denn sonst rennst du mit  dem Kopf mit voller Wucht an eine Wand!
Du wirst früher oder später nicht daran vorbeikommen! Darum besser am Anfang mehr Zeit darin investieren!
Hier mal ein Link für einen Einstieg in JavaFX: Client Technologies: Java Platform, Standard Edition (Java SE) 8 Release 8
Für den Anfang kannst du vieleicht mal den Scene Builder von Oracle anschauen:  JavaFX Scene Builder 2.0 Download
Ist relativ einfach mit diesem Tool eine FX-Gui zu erstellen.


Viel Spass und Erfolg beim Einstieg in JavaFX

ps. 
Englische Literatur bzw. Tutorials lesen ist nicht so schwer... wieso nicht mal probieren, bevor du ein Deutsches buch / tutorial suchst ;-)


----------



## ernst (28. Okt 2014)

>>
>>Der von dem Designer erstellte Quellcode interessiert mich nicht
>>
>
>Das ist schon mal eine schlechte Einstellung
>
Als FX-Anfänger will ich zuerst mal einfache Sachen machen. Deswegen interessiert mich der vom Designer erzeugte Quellcode zunächst nicht.
Für einen Profi sieht die Sache vermutlich anders aus ...

mfg
Ernst


----------



## Joose (28. Okt 2014)

ernst hat gesagt.:


> Für einen Profi sieht die Sache vermutlich anders aus ...



Es ist eben genau umgekehrt, bzw sollte so sein.



ernst hat gesagt.:


> Als FX-Anfänger will ich zuerst mal einfache Sachen machen. Deswegen interessiert mich der vom Designer erzeugte Quellcode zunächst nicht.



Gerade als Änfanger solltest du den Code angreifen und verstehen 

was ist alles wichtig?
warum muss man so schreiben?
wehalb wird das gebraucht
auf was muss ich achten?
was passiert mit [X] wenn ....?

Als "Profi" solltest du diese Sachen dann schon wissen, weil es vorkommen wird auch Teile des UI manuell anpassen zumüssen.
GUI Builder generieren zwar schon besseren Code als früher, aber (meiner persönlichen Meinung nach) nicht den optimalsten Code.
Und vielleicht kommt auf einmal der Zeitpunkt wo du Panel dynamisch im Code zusammenbauen willst/musst


----------



## dzim (28. Okt 2014)

Mal davon abgesehen, das der Code vom JavaFX-UI-Designer schlechthin (SceneBuilder) kein Java Code, mit dem du dich auseinandersetzen musst, sondern ein (F)XML. Da UI und Controller (so heissen bei JavaFX die Klassen mit der Logik) trotz der Trennung eng beieinander stehen, erklärt sich eigentlich von selbst.

Der einzige Weg (den ich kenne) um aus FXML Java-Code zu generieren ist IMHO das e(fx)clipse-Plugin von Eclipse. Aber ich sehe da eigentlich nur wenige Gründe das zu nutzen: Verstehen, wie JavaFX im inneren funktioniert (also wie aus der XML am Ende eine GUI wird; das ist zugegebenermassen noch ein recht guter Grund), aber auch weil man vielleicht denkt, man müsse noch wie zu Swing-Zeiten den Code unbedingt als Klasse vorliegen habe (ok, kann vielleicht bei Code-Obfuscation was nutzen; oder aber weil man daraus Snippets generieren möchte die man woanders (a.k.a. andere Controller) einbetten kann - wobei ich das mit fx:include auch gut hinbekommen kann (je nach Einsatzgebiet)).

Also ich würde dir raten, dir die Links von *@knilch* mal anzuschauen und ein wenig das Netz zu durchforsten. Letzteres ist gerade bei Animationen sinnvoll - und spätestens hier solltest du dich auch darum bemüht haben, wie JavaFX im inneren Tickt, sonst gerätst du vielleicht an Probleme, die du aus der Swing-Welt noch nicht so kanntest.

Ich jedenfalls finde JavaFX, mit seiner deklarativen GUI toll, bin auch positiv vom Animations-Framework und dem Databinding überrascht und finde das CSS-Styling recht mächtig (vielleicht recht komplex, aber mächtig).


----------



## ernst (28. Okt 2014)

>
>Mal davon abgesehen, das der Code vom JavaFX-UI-Designer schlechthin (SceneBuilder) kein Java Code, mit dem du >dich auseinandersetzen musst, sondern ein (F)XML. 
>
Der JavaFX-UI-Designer erzeugt (F)XML Code.
Muß ich den also nicht verstehen?


>
>Der einzige Weg (den ich kenne) um aus FXML Java-Code zu generieren ist IMHO das 
>e(fx)clipse-Plugin von Eclipse. 
>
Wie wird das dann mit Netbeans gemacht?
D.h. wie erzeuge ich mit Netbeans und dem JavaFX-UI-Designer eine GUI, 
in der ich eigenen Java-Code einbauen kann?

>
>Aber ich sehe da eigentlich nur wenige Gründe das zu nutzen: Verstehen, wie JavaFX im inneren funktioniert 
>(also wie aus der XML am Ende eine GUI wird; das ist zugegebenermassen noch ein recht guter Grund), 
>
Ich verstehe dich nicht ganz:
Der JavaFX-UI-Designer erzeugt (F)XML Code.
Muß ich den jetzt verstehen oder nicht ?
Bzw. was muß ich deiner Meinung nach verstehen?

mfg
Ernst


----------



## VfL_Freak (29. Okt 2014)

Moin,



ernst hat gesagt.:


> >>
> Als FX-Anfänger will ich zuerst mal einfache Sachen machen. Deswegen interessiert mich der vom Designer erzeugte Quellcode zunächst nicht.
> Für einen Profi sieht die Sache vermutlich anders aus ...


Nein, wie hier auch schon gedeutet wurde, solltest Du erst die Basics verstehen und ihre Anwendung beherrschen können !
Es bringt Dir rein gar nichts, irgendwas zusammenzuklicken, ohne zu verstehen, was wie und warum funktioniert !!

Bevor Du Dich mit der Grammatik einer Frendsprache auseinandersetzt, lernst Du ja wohl erstmal die Vokabeln, oder ?

Gruß
Klaus


----------



## dzim (29. Okt 2014)

VfL_Freak hat gesagt.:
			
		

> Bevor Du Dich mit der Grammatik einer Frendsprache auseinandersetzt, lernst Du ja wohl erstmal die Vokabeln, oder ?


Ich denke, das geht Hand in Hand, oder? Wie es auch hier der Fall ist... 



			
				ernst hat gesagt.:
			
		

> Der JavaFX-UI-Designer erzeugt (F)XML Code. Muß ich den also nicht verstehen?


Doch natürlich schon. Was ich meinte, war aber etwas anderes - auch wenn vielleicht nicht so geschickt formuliert:
Der FXML-Code wird zur Laufzeit von JavaFX interpretiert. Im Gegensatz zu einer im Source-Code-Form implementierter (JavaFX-) GUI. Das heisst, das bei Code, die GUI bereits in Bytecode-Form (.class-Files) vorliegt, während bei FXML erst wenn es gebraucht wird eine GUI anhand dieser deklarativen Form erstellt wird.
Um FXML-Code zu verstehen ist es also sinnvoll die Basics zu kennen, sprich die in Quellcode erstellten GUIs. Darüber hinaus verlangt FXML natürlich auch ein gewisses XML-Grundwissen und man muss sich mit den dort speziellen Konstrukten vertraut machen (Script-Tags, Includes anderer FXMLs, ...)



			
				ernst hat gesagt.:
			
		

> Wie wird das dann mit Netbeans gemacht? D.h. wie erzeuge ich mit Netbeans und dem JavaFX-UI-Designer eine GUI, in der ich eigenen Java-Code einbauen kann?


AFAIF kannst du in NetBeans selbst GUIs im Code schreiben, aber der SceneBuilder sollte darüber hinaus gut integriert sein, so dass du dort eine FXML-Datei auch anlegen kannst, diese dann aber mit dem separaten Programm SceneBuilder bearbeitet wird.
Ich hab aber mal gelesen, dass dadurch, dass der SceneBuilder jetzt von Oracle OpenSourced wurde, einige diesen nun auch als Plugin für NetBeans bereit stellen wollen. Da ich selbst aber nicht NetBeans verwende, kann ich dir zu diesem nichts weiter sagen. Das musst du im Zweifelsfall selbst herausfinden.



			
				ernst hat gesagt.:
			
		

> Ich verstehe dich nicht ganz: Der JavaFX-UI-Designer erzeugt (F)XML Code. Muß ich den jetzt verstehen oder nicht ? Bzw. was muß ich deiner Meinung nach verstehen?


Siehe oben: Quellcode bzw. JavaFX-API lernen, dann FXML verstehen. Bei letzteren ist es natürlich sinnvoll, dir die UI erst mal im Designer zu erstellen und dann dir die FXML selbst genauer anzuschauen und versuchen die Paralellen (die hierarchische Strucktur) zum Quellcode zu erkennen.

Am Ende solltest du beides können. Und generell gilt, dass es am Ende auch sinnvoller ist, den deklarativen Weg zu nutzen.
Allerdings entbindet dich das eben nicht von der Pflicht, die Interna zu kennen und zu wissen, dass selbst wenn dir ein (menschlicher) Designer die Oberfläche zukommen lässt, wie er funktioniert, wie man ihn manipuliert u.s.w.
Diese Aussage kommt auch insofern nicht von ungefähr, das JavaFX per default einen etwas schrägen Weg geht: Die in Java selbst geschriebene Logik - die bereits erwähnten Controller - werden im FXML festgelegt. Im Gegensatz dazu macht es Android z.B. anders herrum: Im Controller wird gesagt, welche XML-Datei (hier wird auch ein XML-Format verwendet) er darstellen soll.
Im Moment kann man das nur mit einem zusätzlichen Framework wie DataFX anders herum angehen...


----------

