====== 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 */