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 :

Evènement sur List et JList


Sujet :

Composants Java

  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur Informatique et Réseaux
    Inscrit en
    Avril 2011
    Messages
    232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Informatique et Réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 232
    Par défaut Evènement sur List et JList
    Bonjour,

    J'ai un petit problème à résoudre:

    J'ai un objet que l'on va appeler "Collec" qui contient une liste de "Bidul".
    je souhaite afficher ma liste de "Bidul" dans une JList et pouvoir supprimer ou ajouter depuis ma liste (et pas depuis le model) des "Bidul". Cette action doit lancer un "Event" qui mettra a jour le model et par conséquence ma JList.

    Je ne sais pas trop quoi coder pour arriver à ceci. Le DefaultListModel ne suffit pas et je sais pas si je dois créer mon propre model ou ma propre List ou si simplement ajouter un listener suffirait (mais je sais ni où, ni comment le faire).


    Mer de votre aide.

  2. #2
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Par défaut
    Bonjour,

    Si ca fonctionne avec DefaultListModel

    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
     
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.event.*;
     
     
    public class TestList extends JFrame implements ListSelectionListener {
     
    	JPanel  panel;
    	JList maList;
    	DefaultListModel  model = new DefaultListModel();
     
    	Font f;
     
    	public TestList() {
     
    		super();
    		//this.setSize (new Dimension (800, 600));
    		this.setResizable (false);
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		panel = new JPanel();
    		for(int i=0;i<10;i++)
    			model.addElement(new Integer(i));
    		maList = new JList(model);
    		maList.setPreferredSize(new Dimension(100,200));
    		maList.addListSelectionListener(this);
    		panel.add(maList);
    		add(panel);
    		pack();
    		setVisible(true);
    	}
     
    	public static void main(String[] args) {
    		TestList tl = new TestList();
    	}
     
    	public void valueChanged(ListSelectionEvent e) {
    		model.removeElement(maList.getSelectedValue());	
    	}
    }

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur Informatique et Réseaux
    Inscrit en
    Avril 2011
    Messages
    232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Informatique et Réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 232
    Par défaut
    Dans ton exemple tu utilises le model pour la suppression or moi je souhaite utiliser une List de la classe java.util.List.

    Avec ta méthode je devrais initialiser le model en ajoutant chaque élément de ma liste mais le problème est que si on supprime un élément du model il ne sera pas supprimé de ma liste.

    Je cherche un moyen de gérer le model en ne touchant qu'a la liste (la java.util.List).

  4. #4
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Par défaut
    bonjour,

    je ne vois pas trop l'intérêt d'utiliser une list à la place du model mais bon ceci ne me regarde pas

    Tu peux par exemple définir une méhode ajouter et une méthode enlever pour ta java.util.List dans laquelle tu mets en même temps à jour le model

    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
    48
    49
    50
    51
    52
     
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.event.*;
    import java.util.List;
    import java.util.ArrayList;
     
    public class TestList extends JFrame implements ListSelectionListener {
     
    	JPanel  panel;
    	JList maJList;
    	DefaultListModel  model = new DefaultListModel();
    	List maList = new ArrayList();
     
    	Font f;
     
    	public TestList() {
     
    		super();
    		//this.setSize (new Dimension (800, 600));
    		this.setResizable (false);
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		panel = new JPanel();
    		for(int i=0;i<10;i++)
    			ajouterElement(maList,model,new Integer(i).toString());
    		maJList = new JList(model);
    		maJList.setPreferredSize(new Dimension(100,200));
    		maJList.addListSelectionListener(this);
    		panel.add(maJList);
    		add(panel);
    		pack();
    		setVisible(true);
    	}
     
    	public static void main(String[] args) {
    		TestList tl = new TestList();
     
    	}
     
    	public void valueChanged(ListSelectionEvent e) {
    		enleverElement(maList,model,(String)maJList.getSelectedValue());	
    	}
    	public void ajouterElement(List list, DefaultListModel model, String element) {
    		list.add(element);
    		model.addElement(element);
    	}
    	public void enleverElement(List list,DefaultListModel model, String element) {
    		list.remove(element);
    		model.removeElement(element);
    	}
    }
    Encore plus propre tu crées une classe MaList qui étend java.util.List et qui aura une variable d'etat DefaultListModel.

    tu crées les méthodes citées au dessus et dans ton programme principale tu crées ton JList avec le model de MaList

  5. #5
    Membre éclairé
    Homme Profil pro
    Ingénieur Informatique et Réseaux
    Inscrit en
    Avril 2011
    Messages
    232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Informatique et Réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 232
    Par défaut
    En fait mon programme va beaucoup plus loin, je m'explique:
    J'ai une classe Exercise qui contient une java.lang.List<Evolution>.

    Je n'ai donc pas accès à ma vue depuis mon model (cf. MVC).

    Je voulais en fait faire comme dans la librairie GlazedList, en effet leur model prend en paramètre directement la liste donc une modification de celle-ci est automatiquement répercutée sur le model.

    Si quelqu'un sait comment on fait cela, je suis intéressé.


    Merci

  6. #6
    Membre éclairé
    Homme Profil pro
    Ingénieur Informatique et Réseaux
    Inscrit en
    Avril 2011
    Messages
    232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Informatique et Réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 232
    Par défaut
    Ta solution avec le DefaultListModel inclu dans ma List est pas mal mais ne fonctionne pas quand on utilise hibernate.

    J'ai donc créé une classe qui étends DefaultListModel et qui a en paramètre une List et en overridant quelques méthodes ça fonctionne.

    Par contre avec cette solution on modifie le model qui lui modifie automatiquement ma liste, c'est une solution acceptable mais j'aimerai bien savoir comment faire l'inverse.

    je pense qu'il faut que mon model implements ListDataListener mais je sais pas comment l'utiliser.

  7. #7
    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
    Mieux vaut éviter de redéfinir DefaultListModel, tu embarques pas mal de choses inutiles et qui pourraient induire des bugs, a moins de redéfinir chaque méthode.

    Le plus propre étant d'hériter d'AbstractListModel qui définit tout le nécessaire pour créer un modèle de list, avec les méthodes de gestion des évènements (fireXXX).

  8. #8
    Membre éclairé
    Homme Profil pro
    Ingénieur Informatique et Réseaux
    Inscrit en
    Avril 2011
    Messages
    232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Informatique et Réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 232
    Par défaut
    Bonjour,

    En fait dans les méthode redéfinies j'appelle la méthode de la classe mère, donc pas de problème d'implémentation:
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    import java.util.List;
    import javax.swing.DefaultListModel;
     
    /**
     *
     * @author Spiritkill
     */
    public class DefaultListModelWithList extends DefaultListModel {
     
        private final List myList;
     
        public DefaultListModelWithList(List myList) {
            this.myList = myList;
            for(Object obj:myList){
                super.addElement(obj);
            }
        }
     
        @Override
        public void removeElementAt(int index) {
            myList.remove(index);
            super.removeElementAt(index);
        }
     
        @Override
        public void addElement(Object obj) {
            myList.add(obj);
            super.addElement(obj);
        }
     
        @Override
        public boolean removeElement(Object obj) {
            myList.remove(obj);
            return super.removeElement(obj);
        }
     
        @Override
        public Object set(int index, Object element) {
            myList.set(index, element);
            return super.set(index, element);
        }
     
        @Override
        public void add(int index, Object element) {
            myList.add(index, element);
            super.add(index, element);
        }
     
        @Override
        public Object remove(int index) {
            myList.remove(index);
            return super.remove(index);
        }
     
        @Override
        public void setElementAt(Object obj, int index) {
            myList.set(index, obj);
            super.setElementAt(obj, index);
        }
     
        @Override
        public void removeAllElements() {
            myList.clear();
            super.removeAllElements();
        }
     
        @Override
        public void removeRange(int fromIndex, int toIndex) {
            for(int i = fromIndex; i <= toIndex; i++){
                myList.remove(i);
            }
            super.removeRange(fromIndex, toIndex);
        }
    }

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

Discussions similaires

  1. Evènements Sur Liste-Combo
    Par dsr57 dans le forum WinDev
    Réponses: 7
    Dernier message: 07/04/2014, 14h53
  2. [Flex4] Evénement sur spark list
    Par yvancoyaud dans le forum Flex
    Réponses: 3
    Dernier message: 28/02/2013, 14h21
  3. Evènements sur JList
    Par Kara759 dans le forum Composants
    Réponses: 1
    Dernier message: 03/12/2012, 11h28
  4. [AC-2007] Evènement sur zone de liste
    Par manusp dans le forum IHM
    Réponses: 19
    Dernier message: 13/04/2011, 21h51
  5. Evènement sur zone de liste
    Par Mout85 dans le forum IHM
    Réponses: 3
    Dernier message: 20/06/2005, 11h44

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