Bonjour !
Je développe en ce moment une appli avec javafx (sans FXML) pour classer des joueurs avec un système ELO. Les noms des joueurs sont dans un fichier texte et j'ai une listView contenant les noms et trois bouton pour controller cette list: un pour ajouter un joueur, un pour supprimer et un pour modifier. Chaque bouton et la listView sont gérer dans une classe différente puis ajouter dans dans une fenêtre (dans la méthode start).
Jusqu'ici pas de problème, les boutons s'affichent, la listView fonctionne.
C'est au niveau des actions des boutons que j'ai un problème: dans chaque classe il y a un constructeur qui contient:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public BoutonEdit(){ // création d'un bouton 48 Bouton.setOnAction((ActionEvent e) -> { 49 Object player = list.getSelectionModel().getSelectedItem(); // pour savoir quel joueur modifier ou supprimer.. ... }); }L'objet player vaut donc null, je ne peut pas savoir ce qui est sélectionner dans ma list.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Exception in thread "JavaFX Application Thread" java.lang.NullPointerException at main.BoutonEdit.lambda$new$1(BoutonEdit.java:49)
De plus a la fin de l'event je rafraichit la listView (après y avoir ajouté l'objet modifié par exemple) avec list.refresh(); , list étant le nom de ma listView. Mais bien que dans l'event la list contiennent bien tout les elements, dans ma fenêtre principale elle ne change pas.
Je me suis demandé: est ce que java créé une copie de list qui est modifié dans l'event du bouton puis détruite lorsque l'action est finit ?
Mais après quelque pénible heures a cherché j'ai remarque que si dans la méthode start() de ma classe principale j'ajoute le bouton en dernier alors tout fonctionnent normalement:
Ici c'est le boutonDelete qui va fonctionné et les autres (boutonEdit,boutonNew) semblent ignoré la listView
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 BoutonEdit boutonEdit = new BoutonEdit(); ... // pareil pour tout ce qui a besoin d'être ajouté root.getChildren().addAll(titre,vs,bm,boutonNew,boutonEdit,list,boutonDelete);
Je precise que mes classes construisant les boutons héritent de la classe List (qui construit la list) qui héritent elle meme de Parent, sans ça je ne peut pas utiliser "list.getSelectionModel().getSelectedItem()".
Mon programme se compile normalement.
J'aimerais comprendre pourquoi l'action ne marche que pour le dernier Node ajouté et comment faire pour que tout les boutons fonctionnent.
Merci pour votre aide, n'hésité pas à demander si il vous faut plus d'éléments.
Partager