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] Comment ça marche ?


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Par défaut [JList] Comment ça marche ?
    Bonjour,
    Malgré la lecture des tutoriels de Sun et de multiple recherches sur le forum, je n'arrive toujours pas à comprendre le fonctionnement de la JList.
    En fait, ce qui me pose problème c'est le rafraichissement de la JList après modification du modèle.
    Tout d'abord quelle est la meilleure manière de créer un modèle ?
    • implémenter ListModel
    • étendre AbstractListModel
    • ou bien, étendre DefaultTableModel ?


    ensuite, après modification du modèle, comment mettre à jour la JList: updateUI, revalidate(),...?

    Merci d'avance pour votre aide


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  2. #2
    Membre chevronné Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Par défaut
    Je ne suis pas sûr de pouvoir répondre à ta question.

    MAIS (oui, il y a toujours un "mais").

    j'utilise de temps en temps le modèle MVC (surtout modèle et vue, donc ce qui te concerne) sur des JTable.

    En général, je créée une classe qui hérite de DefaultTableModel (qui est une classe, attention : pas une interface) et ensuite j'attribue ce modèle à ma JTable grâce à :
    void setModel(TableModel dataModel)
    Sets the data model for this table to newModel and registers with it for listener notifications from the new data model.
    (méthode de JTable).

    Une fois que le modèle change .... (aïe, là j'ai honte) ... je refais un setModel(...).

    Je te l'accorde, c'est plutôt crade comme manière de l'utiliser ... mais ça a l'avantage de fonctionner.

    Après quelques recherches suite à ton message, j'aurais tendance à utiliser revalidate() car la définition de updateUI est :
    Notification from the UIManager that the L&F has changed. Replaces the current UI object with the latest version from the UIManager.
    Ce qui n'est pas ton cas : c'est le modèle qui a changé.

    J'espère avoir pu t'aider un tout petit peu ...

  3. #3
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Bonjour,

    implémenter directement ListModel est un peu tendu, notamment parce qu'il faut gérer les modifications soi-même.

    En étendant AbstractListModel, il suffit d'appeler les méthodes fire... à chaque modification des données.

    En étendant DefaultListModel, il faut passer par les méthodes fournies, ou, si on les surcharge, appeler super.methode() ou le fire... approprié.

    Ces méthodes fireContentsChanged(), fireIntervalAdded(), fireIntervalRemoved() font tout ce dont tu as besoin, donc pas la peine de réinventer la roue.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  4. #4
    Membre Expert
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Par défaut
    bonjour,
    Merci pour vos reponses mais j'ai d'autres questions:
    Faut-il alors ajouter explicitement la JList comme listener du modèle ?
    Faut-il appeler les trois méthodes à chaque changement du modèle ?


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  5. #5
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Citation Envoyé par afrikha
    Faut-il alors ajouter explicitement la JList comme listener du modèle ?
    Il ne me semble pas. Il faut simplement fournir le modèle comme paramètre du constructeur de la JList.
    Citation Envoyé par afrikha
    Faut-il appeler les trois méthodes à chaque changement du modèle ?
    Non, seulement celle qui est la plus appropriée.
    Ajout d'une ligne à l'index 3 : -> fireIntervalAdded(this, 3, 3);
    Suppression des lignes 0 à 3 -> fireIntervalRemoved(this, 0, 3);
    Ajout de 3 lignes à des endroits différents et suppression de 5 lignes : fireContentsChanged sera plus simple qu'une dizaine de fireIntervalAdded/Removed.


    Si tu ne veux pas t'embêter à savoir laquelle appeler, tu peux faire fireContentsChanged(this, 0, getSize() - 1); mais ce n'est pas optimal.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  6. #6
    Membre éprouvé Avatar de White Rabbit
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 122
    Par défaut
    Je trouve que le tuto de sun sur les liste est assez clair...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // On déclare le modèle
    // DefaultListModel est implementation de 'linterface ListModel
    DefaultListModel monModeleDeListe = new DefaultListModel();
     
    // On déclare la liste avec le modèle
    Jlist maListe = new JList(monModeleDeListe);
     
    // On travaille sur le modèle pour le traitement
    // Et sur la JList pour l'interaction
    monModeleDeListe.addElement("Ligne 1.");
    int index = maListe.getSelectedIndex();
    monModeleDeListe.remove(index);

Discussions similaires

  1. [Débutant][JList] Comment ça marche dans mon cas ?
    Par Invité dans le forum Composants
    Réponses: 31
    Dernier message: 28/06/2004, 11h45
  2. [MFC] list box : comment ça marche
    Par runn2 dans le forum MFC
    Réponses: 4
    Dernier message: 28/01/2004, 13h36
  3. [SYNEDIT] -> Comment ça marche ?
    Par MaTHieU_ dans le forum C++Builder
    Réponses: 2
    Dernier message: 18/01/2004, 20h11
  4. [TP][Turbo Vision] comment ça marche ??
    Par Costello dans le forum Turbo Pascal
    Réponses: 7
    Dernier message: 05/08/2003, 01h24
  5. [update][req. imbriquee] Comment ca marche ??
    Par terziann dans le forum Langage SQL
    Réponses: 3
    Dernier message: 11/07/2003, 13h51

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