Bonjour,
Je travaille avec Java11 et JavaFX11 (avec IntelliJ version Octobre 2019).
Je cherche à construire une IG respectant MVC. Pour cela, je construis une trame de la fenêtre principale, incluant des composants xml. Chacun de ces composants indépendant a un contrôleur, à qui j'aimerais pouvoir transmettre le modèle pour qu'il puisse travailler.
Le code repris en bas de cette page, posté il y a 2 ans, fonctionne sans problème. Il montre comment imbriquer des composants et récupérer le contrôleur par injection. Je cherche à l'adapter pour pouvoir transmettre le modèle à tous les contrôleurs. J'ai donc adapté le main en écrivant :
J'ai bien sûr changé le code de la classe AControlleur en conséquence, pour la doter d'un constructeur adéquat.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 MonModele monModele = ... ; FXMLLoader loader = new FXMLLoader(); loader.setLocation(getClass().getResource("a.fxml")); AController ac = new AController(monModele); loader.setControllerFactory(instanciatedClass -> { return ac; }); Parent root = loader.load();
A l'exécution, la trace indique
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
26
27
28
29
30
31
32 package test; import java.net.URL; import java.util.ResourceBundle; import modele.MonModele; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.Node; public class AController implements Initializable { @FXML private Node b; @FXML private BController bController; public AController(MonModele m) { System.out.println("A création avec modèle."); } public AController() { System.out.println("A création."); } @Override public void initialize(URL url, ResourceBundle rb) { assert (b != null); assert (bController != null); assert (bController.getSubController() != null); } }
et l'exécution s'arrête avec violation de l'assertion assert (b != null);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 A création avec modèle. A controller initialized.
Quelque chose m'échappe sûrement, mais je ne trouve pas laquelle.
Quelqu'un a une idée ?
Merci
Partager