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 :

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();
		}
       }
Bon et mon problème alors ?
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 :

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);
		}
	}
La méthode initCase() :

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();
		}
	}
Et l'erreur qui me fait devenir chauve :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
java.lang.NullPointerException at arsghuul.PlateauController.initCase(PlateauController.java:72)
La ligne 72

Code : Sélectionner tout - Visualiser dans une fenêtre à part
IdGP.add(case_Echiquier[row-1], gridX, gridY);
L'erreur pointe toujours vers mon GridPane, je ne comprend pas pourquoi ...
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