Bonjour à tous,
Le titre est un peu barbare mais je vais tenter d'expliquer au mieux mon souci, je précise que j'ai commencé à utiliser l'API JavaFX il y a très peu de temps, j'ai par conséquent pas mal de chose que j'ai du mal à assimiler mais j'ai soif d'apprendre
Alors en gros mon problème :
J'ai un programme qui comporte plusieurs scène (un petit jeux que je développe avec deux amis), il se trouve, que sur l'une de ces scènes il y a un plateau de jeux qui comporte des cases, ces dernières sont des Objets instancié d'une classe Case extends Pane avec des paramètres qui sont récupéré dans une bdd.
Jusque là tout va bien.
Lorsque j'instancie mes objets susdités dans l'Initializer, au lancement du programme, tout se passe parfaitement bien.
La déclaration dans l'Initializer :
Bon et mon problème alors ?
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 private Pane[] case_Echiquier = new Case [64]; @FXML private GridPane IdGP; private ResultSet rs; private int gridX = 0; private int gridY = 0; public void initialize(URL location, ResourceBundle resources) { rs = Arsghuul.c.requete("SELECT * from CASEP"); try { while(rs.next()){ int caseNum = rs.getInt(1); int casePiegeId = rs.getInt(2); boolean caseEtatPiege = rs.getBoolean(3); int casePlateauId = rs.getInt(4); int casePionId = rs.getInt(5); int row = rs.getRow(); case_Echiquier[row-1] = new Case(caseNum, casePiegeId, caseEtatPiege, casePlateauId, casePionId); case_Echiquier[row-1].setPrefSize(200, 200); try{ IdGP.add(case_Echiquier[row-1], gridX, gridY); if (gridX == 7){ gridX = 0; gridY++; }else{ gridX++; } System.out.println("La case "+row+" a bien été ajouté."); }catch(Exception e ){ System.out.println("L'insertion de la case "+row+" a échoué."); e.printStackTrace(); } case_Echiquier[row-1].addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>(){ public void handle(MouseEvent e){ Case affiche = (Case) e.getSource(); System.out.println(affiche.getCaseNum()); } }); } } catch (SQLException e) { e.printStackTrace(); } }
Et bien c'est simple, c'est pas ce que je veux
Je souhaite que lorsque l'on clique sur le bouton "lancer" de la page d'accueil du programme, l’exécution de ce code se fasse.
Pour se faire, j'ai décidé de le mettre dans une méthode nommé "initCase()" que j'appelle grâce à un ActionEvent sur le dit bouton.
L'ActionEvent du bouton lancer :
La méthode initCase() :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 @FXML public void clickBtnLancer(ActionEvent e){ if(typePartie == 1){ PlateauController.initCase(); myController.setScreen(Arsghuul.PlateauID); }else{ myController.setScreen(Arsghuul.ArmeePersoID); } }
Et l'erreur qui me fait devenir chauve :
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 private static Pane[] case_Echiquier = new Case [64]; @FXML private static GridPane IdGP; private static ResultSet rs; private static int gridX = 0; private static int gridY = 0; public static void initCase(){ rs = Arsghuul.c.requete("SELECT * from CASEP"); try { while(rs.next()){ int caseNum = rs.getInt(1); int casePiegeId = rs.getInt(2); boolean caseEtatPiege = rs.getBoolean(3); int casePlateauId = rs.getInt(4); int casePionId = rs.getInt(5); int row = rs.getRow(); case_Echiquier[row-1] = new Case(caseNum, casePiegeId, caseEtatPiege, casePlateauId, casePionId); case_Echiquier[row-1].setPrefSize(200, 200); try{ IdGP.add(case_Echiquier[row-1], gridX, gridY); if (gridX == 7){ gridX = 0; gridY++; }else{ gridX++; } System.out.println("La case "+row+" a bien été ajouté."); }catch(Exception e ){ System.out.println("L'insertion de la case "+row+" a échoué."); e.printStackTrace(); } case_Echiquier[row-1].addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>(){ public void handle(MouseEvent e){ Case affiche = (Case) e.getSource(); System.out.println(affiche.getCaseNum()); } }); } } catch (SQLException e) { e.printStackTrace(); } }
La ligne 72
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 java.lang.NullPointerException at arsghuul.PlateauController.initCase(PlateauController.java:72)
L'erreur pointe toujours vers mon GridPane, je ne comprend pas pourquoi ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part IdGP.add(case_Echiquier[row-1], gridX, gridY);
C'est là que j'ai besoin de vous.
Il ne me semble pas logique de pas pouvoir accéder aux coordonnées d'un GridPane après la construction de la page, au contraire même, ça voudrait dire qu'on peut plus la modifier ou accéder à son contenu quand la page est chargé ?
Je vous cache pas que je suis perdu et ne sais plus trop vers où tourner ma réflexion ...
Merci d'avance, j'espère que vous m'aiderez à sauver mes cheveux
Pouette
Partager