FXML est un langage de markup qui permet de simplifier la déclaration d'interfaces JavaFx. > [!tip] SceneBuilder > SceneBuilder permet de concevoir visuellement des interface qui sont enregistrées au format FXML. ## Exemple La même composition que lors du cours précédent avec FXML. ![[fxml-example-centered.png|219]] ```java @Override public void start(Stage stage) throws IOException { // La création et l'agencement des composants // est déléguée dans un fichier FXML FXMLLoader fxmlLoader = new FXMLLoader(HelloApplication.class.getResource("hello-view.fxml")); Scene scene = new Scene(fxmlLoader.load(), 320, 240); stage.setTitle("Hello!"); stage.setScene(scene); stage.show(); } ``` ```xml <?xml version="1.0" encoding="UTF-8"?> <?import javafx.scene.control.Button?> <?import javafx.scene.layout.StackPane?> <?import javafx.scene.layout.VBox?> <?import javafx.scene.text.Text?> <StackPane> <VBox style="-fx-alignment: center"> <Text text="Hello World!"/> <Button text="Button"/> </VBox> </StackPane> ``` ## Controlleur Une classe qui peut s'interfacer avec nos vues FXML. ```java public class MyController implements Initializable { public Button button; @Override public void initialize(URL location, Resources resources) button.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { System.out.println("You clicked me!"); } }); } } ``` Correspondance du côté du fichier FXML ```xml <VBox fx:controller="com.foo.MyController" xmlns:fx="http://javafx.com/fxml"> <children> <Button fx:id="button" text="Click Me!"/> </children> </VBox> ``` ## Annotation `@FXML` L'annotation `javafx.fxml.FXML` marque un attribut `private` ou `protected` accessible depuis FXML (mais pas accessible depuis d'autres classes). ```java public class MyController implements Initializable { @FXML private Button button; @Override protected void initialize(URL location, Resources resources) button.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { System.out.println("You clicked me!"); } }); } } ``` ## À suivre [[7.3 - Canvas]]