====== 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 pripadny seznam argumentu 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]].