====== Nastavení JavaFX ======
JavaFX je multiplatformní GUI toolkit pro Java a původně byl zamyšlen coby nástupce GUI knihovny Java Swing zejména pro vytvoření internetových aplikací. Vývoj ovšem pokračoval jiným směrem (nástup technologií založených na JavaScript+HTML+CSS), a tak, přestože v současné době je JavaFX nejmodernějším nástrojem na tvorbu GUI v Java, po verzi 1.8 byl vyřazen ze standardní distribuce Java SDK. O jeho další vývoj se stará společnost [[https://gluonhq.com|Gluon]] a je dostupné na stránkách [[https://openjfx.io|OpenJFX]]. Za této situace je celkem pochopitelné, že při vytváření první vzorové aplikace v prostředí NetBeans (jehož vlastník se po verzi 8 taktéž změnil ze společnosti Oracle na Apache Foundation) v současné době (březen 2020) narazíme na určité potíže. Následující poznámky by měli ulehčit jejich překonání.
Vytvořme tedy první program (analogie „Hello world“) JavaFX v prostředí NetBeans 11.3. Vyžaduje po „naklikání“ vzorového projektu ještě několik drobných úprav podle toho jestli používáme verzi Java 1.8 (připomínám, že je to poslední verze jež v Oracle distribuci obsahoval Java FX, a verze, pro nějž jsou koncipovány materiály předmětu PJV) nebo pro modernější Java 13.
V rámci předmětu PJV vytvářejte **pouze Maven projekty**! Usnadníte tím správu závislostí pro sebe a - v případě semestrálního projektu - i pro cvičícího!
==== NetBeans ====
**Doporučení:**
V případě potíží doporučuji upravit soubor ''netbeans.conf'' v podadresáři ''etc'' instalačního adresáře NetBeans tak, aby aplikace explicitně používala nejnovější instalovanou verzi Java SDK:
''netbeans_jdkhome="vase/cesta/k/jdk"''
např.
''netbeans_jdkhome="C:\Program Files\Java\jdk-13.0.1"''
==== Java 1.8 v NetBeans ====
Prozatím jedniná možnost pod Ubuntu v počítačové učebně.
Vytvořit nový projekt:
''File'' /''New Project'' / ''Java with Maven'' / ''Simple'' (resp. ''FXML'') ''JavaFX Maven Archetype (Gluon)''
Nastavit:
''Project Properties'' / ''Sources'' / ''Source/Binary Format'' nastavit na ''1.8''
''Project Properties'' / ''Build-Compile'' / ''Java Platform'' nastavit na ''JDK 1.8'' (Případně ho přidat přes tlačítko ''Manage Java Platforms'')
Chyba při kompilaci:
''Fatal error compiling: invalid flag: --module-path''
Řešení:
Odstranit soubor ''module-info.java'' (NetBeans ho ukazuje v '''')
Ze souboru ''pom.xml'' odstranit sekci ''...'' a ''...''
Je možné odstranit také soubor ''nbactions.xml''.
V jednom z projektů může dojít k chybě:
''...cannot find symbol''
Je pak nutné nahradit klíčová slova ''var'' - jež Java 1.8 ještě nezná - aktuálním typem proměnné (v mém případě ''String'', ''String'', ''Label'', ''Scene'')
==== Java 13 (a vyšší) v NetBeans ====
Vytvořit nový projekt:
''File'' / ''New Project'' / ''Java with Maven'' / ''Simple'' (or ''FXML'') ''JavaFX Maven Archetype (Gluon)''
Nejde spustit, hlásí:
''JavaFX runtime components are missing, and are required to run this application''
Řešení:
**A.** spoléháme-li na závislosti z repozitáře Maven (a nemáme instalovaný runtime JavaFX) můžeme
v ''Project Properties'' / ''Actions'' / ''Run project'' a/nebo ''Run file via main()'' změnit ''Execute Goals'' na
clean javafx:run
a vymazat obsah pole ''Set properties''.
(podrobný popis najdete zde: https://openjfx.io/openjfx-docs/#IDE-NetBeans sekce „Non-modular with Maven“)
**B.** pokud je v OS instalovaná identická verze runtime JavaFX i mimo systém Maven
lze do ''Project Properties'' / ''Run'' / ''VM Options'' doplnit
--module-path "vase/cesta/k/javafx-sdk-13.0.1/lib" --add-modules=javafx.controls,javafx.fxml
např. ve Windows:
--module-path "C:/Program Files/Java/javafx-sdk-13.0.1/lib" --add-modules=javafx.controls,javafx.fxml
nebo v Ubuntu:
--module-path /opt/java/javafx/javafx-sdk-14/lib --add-modules=javafx.controls,javafx.fxml
(podrobný popis najdete na stránce: https://openjfx.io/openjfx-docs/#IDE-NetBeans sekce „Non-modular from IDE“)
Když projekt ani nekompiluje, je namístě kontrolovat závislosti (dependencies), a pokud je třeba, přidat Maven dependency:
Group Id: ''org.openjfx''
Artifact Id: ''javafx-controls''
Version: např. ''13''
tak, aby se v ''pom.xml'' objevila sekce (nebo tam přímo doplnit):
org.openjfx
javafx-controls
13
Pokud vytvářáme FXML projekt, je třeba obdobně přidat i závislost ''javafx-fxml''.
==== Java 15 v IntelliJ Idea ====
Při vytváření nového projektu postupujme podle návodu [[https://openjfx.io/openjfx-docs|zde]] v sekci **JavaFX and IntelliJ**, **Non-modular with Maven**:
Z nabídky zvolíme "New Project", v dialogu „ProjectSDK:“ 15.0.1 (měli by fungovat i jiné verze nad 11), zaškrtnout „Create from achetype“. Při prvním zakládání projektu JavaFX klik na tlačítko „Add Archetype“, v dialogu vyplnit:
„GroupId:“ ''org.openjfx'',
„ArtifactId:“ ''javafx-archetype-simple'' (případně ''javafx-archetype-fxml'', pokud vytváříme FXML projekt)
„Version:“ ''0.0.6''
„Repository:“ se nemusí zadávat (implicitní hodnota se nastaví podle „File“->„Settings“->„Build, Execution, Deployment“-> „Remote Jar Repositories“)
Ukázkový projekt s podobným obsahem **pom.xml**:
4.0.0
org.example
ideafxtest
1.0-SNAPSHOT
UTF-8
11
11
org.openjfx
javafx-controls
13
org.apache.maven.plugins
maven-compiler-plugin
3.8.0
11
org.openjfx
javafx-maven-plugin
0.0.6
default-cli
org.example.App
by měl kompilovat bez problémů.
----
== První spuštění ==
Z pravého panelu „Maven“ -> „Plugins“ -> „javafx“ -> „javafx:run“
Další běhy:
V okně aktuální konfigurace (vpravo nahoře, vlevo vedle zelené šipky „Run“) vybrat: ''nazev_aplikace[javafx:run]''
----
== Ladění ==
Z pravého panelu „Maven“ -> „Plugins“ -> „javafx“ -> „javafx:run“ -> pravý klik, z pop-up vybrat ''Debug nazev_aplikace[javafx:run]''
V okně „Run“ vidíme:
''Listening for transport dt_socket at address: 8000'' vpravo pak ''Attach debugger'', toto poklepat, nebo z hlavní nabídky ''Run'' vybrat ''Attach to Process'' a poté zvolit aplikaci pro ladění.
----
Rozsáhlý seznam rad, jak začít s JavaFX pro různé kombinace vývojových prostředí a nástrojů najdete v [[https://openjfx.io/openjfx-docs/|dokumentaci Open JFX]].