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 et Model


Sujet :

Composants Java

  1. #1
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut JList et Model
    J'aurais besoins de vos avis sur l'utilisation des JList et leur ListModel.

    Dans mon projet j'ai un objet "Student" qui contiends diverses information sur un eleve et une classe "StudentList" qui contient un tableau de Student et tout ce qu'il faut pour y ajouter/supprimer/lire les donnees.

    J'ai dans mon IDE un JList pour y afficher certaines informations : Nom et PRenom de chaques eleves. Le but etant de cliquer sur un element et d'editer les champs de la classsse Student.

    J'ai vu que creer un JList depuis un ListModel est plus pratique a manipuler qu'a l'aide de Vectors.

    Par contre j'ai du mal a voir ou implementer le ListModel .... Dans la frame qui contient le JList ? ou bien dans ma classe StudentList ? Ou autre .....

    J'ai encore un peu de mal avec le systeme MVC vu que sous Delphi, je manipulais directement les objets graphiques.
    Pour moi la logique serais que depuis la fenetre principale, j'affecte le StudentList a ma fenetre d'edition, puis faire un show qui remplit la list et affiche la frame. L'edition modifie le StudentList directement.

    Merci pour toutes infos complementaire

  2. #2
    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
    Bonsoir,

    Je te conseille d'étendre AbstractListModel dans une classe à part. En implémentant une ListModel tu auras trop de choses à gérer, et d'un autre coté hériter de DefaultListModel je trouve ça moyen car il est assez rudimentaire.

    Voilà, j'espère que c'est clair n'hésite pas à poser des questions le cas écheant

    @+


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

  3. #3
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    C'est a dire ?
    Deriver de AbstractListModel, je veux bien ... mais ca me donne une classe qui gere les JList, comme un ListModel.

    Je le place ou en fait dans mon code ?
    C'est lui qui "heberge" en interne la liste des Student ? ou bien c'est un objet a part qui me sert juste a "piloter" une JList ?

  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
    Citation Envoyé par Clorish
    C'est a dire ?
    Deriver de AbstractListModel, je veux bien ... mais ca me donne une classe qui gere les JList, comme un ListModel.
    Créer une classe implémentant ListModel est un travail fastidieux car tu dois définir les méthodes addListDataListener et removeListDataListener
    alors que la classe AbstractListModel les définit déjà, d'où un gain de temps non négligeable.
    Je le place ou en fait dans mon code ?
    Personnellemt, dans mes applications j'ai un package modeles dans lequel je place tous mes modeles

    C'est lui qui "heberge" en interne la liste des Student ? ou bien c'est un objet a part qui me sert juste a "piloter" une JList ?
    les deux

    @+


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

  5. #5
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    ok .. donc en fait ma classe StudentList qui possede un tableau de Student doit derriver de AbstractListModel ....
    Et ma liste ira donc piocher dans ce modele les infos lorsque le programme effectue un affiche ?

  6. #6
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Correct, et quasiment tous les composants Swing fonctionnent de cette façon (du moins tous ceux qui ont pour but d'afficher des Infos, du JButton au JTree).

    Ensuite si tu veux aller un peu plus loin intéresse toi au binding JGoodies (liaison de composants à des Beans ou des listes de Beans).

    http://www.jgoodies.com/articles/binding.pdf
    Un exemple Maitre/Détail utilisant ce genre de choses:
    http://www.java2s.com/Code/Java/Swin...etailsview.htm


    Ou encore cette suite d'articles sur le Binding JGoodies:
    http://www.javalobby.org/java/forums/t17672
    http://www.javalobby.org/java/forums/t17707
    http://www.javalobby.org/java/forums/t17728

  7. #7
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    ok je vais regarder ca ....
    C'est un esprit legerement differents de Delphi ....

    A y reflechir, sous delphi c'est pareil ... mais en sens inverse.
    J'ai un composant TListBox qui possede des methdes "Add" pour ajouter les elements. Je fais donc :
    Citation Envoyé par Delphi
    Pour tout i allant de 0 a Size-1 Faire
    ListBox.SetItem(MaList.items[i])
    Fin pour
    Or ici si j'ai bien compris c'est le JList qui viens piocher les infos :
    Citation Envoyé par Java
    Pour tout i allant de 0 a Size-1 Faire
    ListBox.Items[i] <= MaList.GetItem[i]
    Fin pour

  8. #8
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Pas réellement
    En fait la JList contient le ListModel en son sein et va directement piocher dedans.

    Voici le début du code de la classe JList

    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
    
    public class JList extends JComponent implements Scrollable, Accessible
    {
        /**
         * @see #getUIClassID
         * @see #readObject
         */
        private static final String uiClassID = "ListUI";
    
        /** 
         * Indicates the default layout: one column of cells.
         * @see #setLayoutOrientation
         * @since 1.4
         */
        public static final int VERTICAL = 0;
    
        /** 
         * Indicates "newspaper style" layout with the cells flowing vertically
         * then horizontally.
         * @see #setLayoutOrientation
         * @since 1.4
         */
        public static final int VERTICAL_WRAP = 1;
    
        /** 
         * Indicates "newspaper style" with the cells flowing horizontally
         * then vertically.
         * @see #setLayoutOrientation
         * @since 1.4
         */
        public static final int HORIZONTAL_WRAP = 2;
    
        private int fixedCellWidth = -1;
        private int fixedCellHeight = -1;
        private int horizontalScrollIncrement = -1;
        private Object prototypeCellValue;
        private int visibleRowCount = 8;
        private Color selectionForeground;
        private Color selectionBackground;
        private boolean dragEnabled;
    
        private ListSelectionModel selectionModel;
        private ListModel dataModel;
        private ListCellRenderer cellRenderer;
        private ListSelectionListener selectionListener;
    }
    Tu vois que le ListModel est un des attributs de ta JList


    Toute la partie Rendering est réalisée par l'UIDelegate de la JList (qui va varier selon dle L&F) Donc grosso merdo, la JList est le controlleur, le ListModel est surprenament le modèle et l'UIDelegate représente la vue (elle réalise toute les opérations de dessin en fait).
    Pour te faire une idée de ce qu'est un UIDelegate il faudra aller dans l'archive src.zip fournie avec le JDK qui fourni la plupart du code de java écrit en java (par contre tout ce qui est natif est peu présent, propriété intellectuelle oblige, même si ça changera pour java 7 puisque java passe en GPL). L'example à regarder est le BasicListUI dans javax.swing.plaf.basic

    En général matter un tant soit ces sources apprend pas mal de choses quant au comportement de java.

  9. #9
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    En général matter un tant soit ces sources apprend pas mal de choses quant au comportement de java.
    Tout a fait d'accord .... Je fait de meme avecles sources des composants Delphi.
    Non seulemet on en apprends pas mal sur le fonctionnement .... mais on en appprends pas mal tout court
    J'ai pas mal progressé et trouve de nouvelles idees en mattant un peu les sources ...

    Par contre, la java, j'attends un peu de le maitriser un peu plus

    Je vais voir plus en details l'histoire du JList.

Discussions similaires

  1. Réponses: 1
    Dernier message: 30/01/2010, 20h25
  2. Probleme JList / JList Model / Evolution dynamique
    Par SebastianPx dans le forum Composants
    Réponses: 1
    Dernier message: 10/02/2009, 12h14
  3. remplir un model avec les valeurs d'une JList
    Par soujava dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 15/05/2008, 21h11
  4. JList en line wrapping
    Par dreydrey dans le forum Composants
    Réponses: 3
    Dernier message: 16/12/2003, 11h22
  5. programmation reseau - couche 2 du modele osi
    Par sahor dans le forum C++Builder
    Réponses: 3
    Dernier message: 06/11/2002, 18h33

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