Include, ca fonctionne, mais je ne comprends pas pourquoi.
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 8O .
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) :
Code:
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 ... |
Ensuite je declare le Controller de l'include dans mon controller principal (FxFenetreController) :
Code:
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)
Code:
1 2 3 4 5 6 7
|
<content>
<fx:include fx:id="fxOngletParametres" source="fxOngletParametres.fxml"/>
</content> |
Ensuite dans le FXML de mon include je declare le controler : (fxOngletParametres.fxml)
Code:
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 :
Code:
<fx:include fx:id="fxOngletParametres" source="fxOngletParametres.fxml"/>
et cela dans son Controller :
Code:
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...