====== GUI v JavaFX ======
===== Odkazy na materiály =====
[[https://openjfx.io/javadoc/14/|JavaDoc JFX]]
[[https://openjfx.io/openjfx-docs/|Zprovoznění JFX]]
[[https://docs.oracle.com/javafx/2/api/javafx/scene/doc-files/cssref.html| CSS reference in JavaFX]]
===== Základní komponenty =====
[[https://openjfx.io/javadoc/14/javafx.graphics/javafx/application/Application.html|Application]]
* Předek všech aplikací v JavaFX. Třída představující GUI by měla vypadat takto:
import javafx.application.Application;
import javafx.stage.Stage;
public class MyFxApp extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
primaryStage.setTitle("MyTitle");
primaryStage.show();
}
}
* spouští se voláním metody ''Application.launch()''
[[https://openjfx.io/javadoc/14/javafx.graphics/javafx/stage/Stage.html|Stage]]
* Obdoba JFrame ve Swingu. Pro zobrazení okna je nutono volat metodu ''show()''
* Nastavení scény metodou ''setScene()''
[[https://openjfx.io/javadoc/14/javafx.graphics/javafx/scene/Scene.html|Scene]]
* Kontejner obsahující veškerý obsah okna
* V konstruktoru předáváme referenci na rodičovský prvek - typicky některý z layoutů, který obsahuje samotné grafické komponenty
[[https://openjfx.io/javadoc/14/javafx.graphics/javafx/scene/layout/package-summary.html|Layouty]]
* [[https://openjfx.io/javadoc/14/javafx.graphics/javafx/scene/layout/BorderPane.html|BorderPane]]
* [[https://openjfx.io/javadoc/14/javafx.graphics/javafx/scene/layout/GridPane.html|GridPane]]
* [[https://openjfx.io/javadoc/14/javafx.graphics/javafx/scene/layout/FlowPane.html|FlowPane]]
* [[https://openjfx.io/javadoc/14/javafx.graphics/javafx/scene/layout/HBox.html|HBox]]
* [[https://openjfx.io/javadoc/14/javafx.graphics/javafx/scene/layout/VBox.html|VBox]]
* Vkládání komponent pomocí metody ''add()'' nebo ''addAll()''
[[https://openjfx.io/javadoc/14/javafx.controls/javafx/scene/control/package-summary.html|Komponenty]]
* [[https://openjfx.io/javadoc/14/javafx.controls/javafx/scene/control/Button.html|Button]]
* [[https://openjfx.io/javadoc/14/javafx.controls/javafx/scene/control/Label.html|Label]]
* [[https://openjfx.io/javadoc/14/javafx.controls/javafx/scene/control/TextField.html|TextField]]
* [[https://openjfx.io/javadoc/14/javafx.controls/javafx/scene/control/ListView.html|ListView]]
===== Reakce na události =====
Komponenty mají metody na registraci EventHandleru. Typicky se jmenují ''SetOnXXX()'', např. pro tlačítko ''setOnAction()'',''setOnMouseClicked()'', pro TextField je to obdobně ''setOnAction()'' atd.. Tvorba handlerů je již stejná, jako ve Swingu.
===== Formátování komponent pomocí CSS =====
Pokud se v projektu nepoužívá FXML, lze jednotlivé komonenty individuálně stylovat pomocí textu v parametru metody ''setStyle()''.
Stylování lze zajistit také pro celou scénu pomocí externího stylesheetu voláním ''scene.getStylesheets().add("style.css");''
===== Vzor aplikace JavaFX bez FXML =====
{{ :courses:b0b36pjv:online:jfxcounter1.zip | Čítač 1}}
===== Vzor aplikace JavaFX s FXML =====
{{ :courses:b0b36pjv:online:jfxcounter2.zip | Čítač 2}}
===== Nastavení Netbeans 11.2 pro JavaFX 14 =====
Java musí být ve verzi 11+, v nastavení projektu v sekci "Run > VM Options" je třeba doplnit cestu ke stažené JavaFX argumenty JVM takto: --module-path "D:\javafx-sdk-14\lib" --add-modules javafx.controls,javafx.fxml