IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaFX Discussion :

Besoin d'aide pour gerer une listView


Sujet :

JavaFX

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 3
    Par défaut Besoin d'aide pour gerer une listView
    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..
    ...
         });
    }
    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)
    L'objet player vaut donc null, je ne peut pas savoir ce qui est sélectionner dans ma list.

    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:

    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);
    Ici c'est le boutonDelete qui va fonctionné et les autres (boutonEdit,boutonNew) semblent ignoré la listView

    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.

  2. #2
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 3
    Par défaut
    Je pense avoir trouver la source du problème: 4 instance de la classe List sont créé ce qui créé 4 listView indépendantes.
    Une nouvelle instance est créé quand on j'instancie chaque bouton (classe fille) avant de les ajouté a la fenêtre.
    Comment faire pour accéder à la listView sans héritage ? Il faut que la listView soit unique mais visible par des classes extérieur.
    J'ai pensé à déplacer tout le code des boutons dans la classe List mais cette solution manque d'élégance, le code serait moins souple ; je pense qu'il doit y avoir un autre moyen.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 3
    Par défaut
    Bon en fait c'est vraiment basique, il suffit de déclarer static la listView pour qu'elle soit unique.

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 897
    Billets dans le blog
    54
    Par défaut
    Bonjour,
    Tout déclarer en statique n'est pas forcément la meilleur solution car cela peut entraîner d'autres soucis de conception. Je te conseille donc de nous expliquer en détail un peu plus l'architecture de ton logiciel et de te pencher sur le patron de conception Singleton.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

+ Répondre à la discussion
Cette discussion est résolue.

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo