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

Composants Java Discussion :

JList dans un MVC


Sujet :

Composants Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 17
    Points : 17
    Points
    17
    Par défaut JList dans un MVC
    Bonjour tout le monde,

    J'ai besoin de votre aide car je tourne en rond...
    Suis en train de coder une petite applic MVC. Et dans l'une de mes vues, je voulais rajouter un JList. Et au lieu d'utiliser le DefaultListModel et de faire des addElement selon le contenu de mon modèle, je voulais réutiliser mon modèle existant et l'exploiter pour mettre à jour mon JList (ce qui est plus logique).

    Juste en vitesse pour expliquer l'applic, j'ai une liste de matériel, et quand je clique sur une ligne, ça doit m'afficher (dans la fameuse JList) une liste de fabricant. Et si je change de sélection dans la liste de matériel, ma JList se rafraîchi sur la partie droite de l'écran et affiche la liste de fabricant correspondant à la sélection.

    Donc du coup j'ai adapté mon modèle et je l'ai fait implémenter de ListModel (j'hérite déjà d'une classe qui gère mes listener du MVC donc c'était pratique d'avoir cette Interface à implémenter). Donc j'ai implémenté mes méthodes.

    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
     
        public int getSize() {
            try {
                return getInfo().get(selectedIndex).getList().size();
            }
            catch (Exception _e) {
                return 0;
            }
        }
     
        public Object getElementAt(int _index) {
            try {
                return getInfo().get(selectedIndex).getList().get(_index).getResource().getName();
            }
            catch(Exception _e) {
                return null;
            }
        }
     
        public void addListDataListener(ListDataListener _l) {
        }
     
        public void removeListDataListener(ListDataListener _l) {
        }
    La méthode getElementAt et getSize retourne 0 et null si aucune ligne n'a été sélectionnée. Donc au démarrage de l'applic, ça retournera taille 0, et null. Mais ensuite dès que je sélectionne une ligne matériel, ça me retourne la bonne valeur !! Par exemple 35 si j'ai 35 fabricants pour le matériel sélectionné.

    Ensuite, j'ai la vue :

    Dans le constructeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            resourceList = new JList();
            resourceList.setModel(le fameux model... qui hérite maintenant de ListModel);
            resourceList.setCellRenderer(new MyCellRenderer());
            hardwareScroller = new JScrollPane(resourceList);
    Quel est mon problème ? C'est que la JList ne fonctionne pas bien. Si je lui passe un return 100, au lieu du return 0 au premier affichage lorsqu'aucune ligne n'a été sélectionnée, en cliquant sur une ligne, ça va être OK, l'affichage va m'afficher ma liste de fabricants, mais avec trop de ligne (qui seront vides), puis ça fini par se rafraîchir correctement après plusieurs clics, si par contre je laisse à return 0, ça ne va plus jamais afficher correctement, ça va rester vide, sans JList d'affichée. C'est un petit peu difficile d'expliquer le comportement.

    Alors j'ai pensé à un rafraîchissement qui ne se faisait pas, j'ai rajouté updateUI() dans la méthode appelée lorsque une donnée du modèle a été modifié, mais idem... J'imagine que le problème est dû à un rafraîchissement qui ne se fait pas car j'ai mal implémenté mon JList ??

    Est-ce que vous auriez une piste à me donner ?
    D'avance un grand merci

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 17
    Points : 17
    Points
    17
    Par défaut
    Bon, en fait, il y a fallu pour que je poste la question pour que je résolve plus ou moins le problème :

    Dans la méthode de ma vue, appelée lorsqu'une donnée du modèle a été mise à jour : J'avais mis updateUI()... j'ai remplacé par un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    resourceList.updateUI()
    et ça fonctionne... Le truc c'est que ça me semble pas propre du tout... Me semble qu'on devrait pouvoir faire sans forcer le rafraîchissement du JList ?

    Est-ce que qqn à une idée ?
    Merciiiiii.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 17
    Points : 17
    Points
    17
    Par défaut
    Je n'avais pas eu l'occasion de revoir le problème... c'est chose faite.

    Alors le problème c'est "simplement" que mon ListModel est mal implémenté. Idéalement il aurait fallu hériter d'un AbstractListModel qui a justement déjà la gestion des événements qui est codée (nécessite seulement l'appel des fireXXX pour avertir le listener d'une modification (par exemple fireContentChanged()).

    Mais là vu que je ne pouvais pas en hériter j'avais implémenté ListModel, et laissé la redéfinition des méthodes "addListDataListener(ListDataListener _l)" et "removeListDataListener(ListDataListener _l)" vide. Et justement c'est ces listeners-là qui indiquent que la liste a été mise à jour.

    Bon, reste à implémenter tout ça, mais le problème est résolu.
    L'implémentation est super bien expliquée dans ce document : http://www-igm.univ-mlv.fr/~forax/en.../UI-06-MVC.pdf

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

Discussions similaires

  1. Jlist dans une Jtable
    Par Arnich dans le forum Composants
    Réponses: 2
    Dernier message: 15/02/2008, 13h05
  2. Réponses: 2
    Dernier message: 15/11/2007, 15h13
  3. integrer une jList dans une jTable
    Par amelA dans le forum Composants
    Réponses: 1
    Dernier message: 17/05/2007, 11h37
  4. Réponses: 6
    Dernier message: 13/11/2006, 16h29
  5. rafraichissement d'une JList dans un JScrollPane
    Par Nicool dans le forum Composants
    Réponses: 3
    Dernier message: 12/05/2006, 12h59

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