Bonjour,
J'ai une application JavaFx.
J'ai fais une fenetre et pour ne pas complexifier les fichiers, j'ai choisi de faire des "include" pour separer certaines parties du code et rendre tout cela plus lisible.
Dans JavaFx on utilise des "Id" et des balise @FXML pour lier les differents composants mais dans mon cas, les liens ne correspondent pas directement et fonctionne comme si tel etait le cas.
J'aimerais avoir l'explication pour les nuls si vous la connaissez :
(je precise ma question en bas de page)
pour info, jai lu la doc sur les nested controller que voici :
http://docs.oracle.com/javafx/2/api/...ed_controllers
Les bouts de code concerné :
mon main principal (FxFenetre) :
Ensuite je declare le Controller de l'include dans mon controller principal (FxFenetreController) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 public void start(Stage primaryStage) { primaryStage.setTitle("Amaz'sTool's"); controller = new FxFenetreController(); FXMLLoader loader = new FXMLLoader(getClass().getResource("fxFenetre.fxml")); loader.setController(controller); // loader.setLocation(getClass().getResource("fxFenetre.fxml"));//getClass().getResource("FxFenetre.fxml") Parent myPane = null; try { myPane = (Parent) loader.load(); } catch (IOException e) {e.printStackTrace(); } Scene myScene = new Scene(myPane); myScene.getStylesheets().add(FxFenetre.class.getResource("fxconsole.css").toExternalForm()); ETC ... ETC ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 // l'include @FXML private FxOngletParametresController fxOngletParametresController; ///// @FXML void initialize() { this.fxFenetreController = this; assert rootScrollpane != null : "fx:id=\"rootScrollpane\" was not injected: check your FXML file 'fxFenetre.fxml'."; casesInit(); fxOngletParametresController.setB(b); etc etc ... }
ensuite dans le FXML de ce controller je met l'include avec un id et la source FXML (fxFenetre.fxml)
Ensuite dans le FXML de mon include je declare le controler : (fxOngletParametres.fxml)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <content> <fx:include fx:id="fxOngletParametres" source="fxOngletParametres.fxml"/> </content>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <VBox styleClass="d" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1" fx:controller="botpackage.FxOngletParametresController"> </VBox>
Ma question est la suivante :
Comment JavaFX fait t'il le lien entre cela dans le fichier FXML :
et cela dans son Controller :
Code : Sélectionner tout - Visualiser dans une fenêtre à part <fx:include fx:id="fxOngletParametres" source="fxOngletParametres.fxml"/>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 @FXML private FxOngletParametresController fxOngletParametresController; ///// @FXML void initialize() { this.fxFenetreController = this; assert rootScrollpane != null : "fx:id=\"rootScrollpane\" was not injected: check your FXML file 'fxFenetre.fxml'."; casesInit(); fxOngletParametresController.setB(b);
Je ne met meme pas le @FXML de l'id (fxOngletParametres) et si j'enleve " fx:id="fxOngletParametres" " , cela ne marche plus....
Je ne comprends pas comment il fait le lien lui meme...
Partager