JavaFx
JavaFx application
JavaFx utilise une analogie avec le théâtre pour bâtir la structure de ses applications.
- Le programme Main dérive de Application
- Le Stage (primaryStage) est le théâtre dans lequel les éléments de l'application vont évoluer, il correspond à la fenêtre
- La Scene est l'élément qui permettra de faire apparaître ces éléments, elle correspond au décor ou au lieu de l'action
- La Scene contient un élément parent (noeud Root) qui contient lui même d'autres noeuds
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
try {
Scene scene = new Scene(new BorderPane());
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.setTitle("First application JavaFx");
primaryStage.show();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}
Séparation des couches
Chargement d'une vue à partir d'un fichier fxml :
@Override
public void start(Stage primaryStage) {
try {
BorderPane root = (BorderPane)FXMLLoader.load(getClass().getResource("Sample.fxml"));
Scene scene = new Scene(root,400,400);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.MenuButton?>
<?import javafx.scene.control.MenuItem?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.BorderPane?>
<BorderPane xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/9.0.1" fx:controller="application.SampleController">
<top>
<MenuButton mnemonicParsing="false" text="MenuButton" BorderPane.alignment="CENTER">
<items>
<MenuItem mnemonicParsing="false" text="Action 1" />
<MenuItem mnemonicParsing="false" text="Action 2" />
</items>
</MenuButton>
</top>
<center>
<AnchorPane prefHeight="200.0" prefWidth="468.0" BorderPane.alignment="CENTER">
<children>
<Button fx:id="btAdd" layoutX="14.0" layoutY="14.0" mnemonicParsing="false" onAction="#btAddClick" prefHeight="25.0" prefWidth="115.0" text="Button" />
</children>
</AnchorPane>
</center>
</BorderPane>
Association d'écouteurs
Java 8 permet l'utilisation des Lambda expressions :
StackPane elem=new StackPane();
elem.setOnMouseMouve((e)->{system.out.println("x : "+e.getX()+",y : "+e.getY())});
Bind sur les propriétés d'un objet
canvas.heightProperty().bind(p.heightProperty());
Remplissage et sélection sur un TableView
@FXML
private void initialize() {
// Initialize the person table with the two columns.
prenomColumn.setCellValueFactory((CellDataFeatures<Utilisateur, String> feature) -> {
Utilisateur user = feature.getValue();
return new SimpleObjectProperty<>(user.getPrenom());
});
nomColumn.setCellValueFactory((CellDataFeatures<Utilisateur, String> feature) -> {
Utilisateur user = feature.getValue();
return new SimpleObjectProperty<>(user.getNom());
});
showUser(null);
personnTable.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> showUser(newValue));
}
Ressources
| fontawesomefx | http://bitbucket.org/Jerady/fontawesomefx |
| jfxtras | http://jfxtras.org/ |
| Download jar |