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 :

Sélection d'un élément d'une JList


Sujet :

Composants Java

  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Août 2008
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 265
    Par défaut Sélection d'un élément d'une JList
    Bonjour,


    J'ai un souci avec une de mes JList. Je lui ai affecté plusieurs actions (clic droit, clic gauche et double clic).

    Quand je clique dans ma JList à un endroit qui ne contient pas d'éléments, le "carré" m'indiquant quel élément est sélectionné descend au dernier élément. A priori le dernier élément est donc sélectionné.

    Or moi je voudrais bien que ça ne fasse rien du tout. Si je clique sur un élément, ça doit le sélectionner, sinon ça ne change rien.


    Je dois être un rien embrouillant sur ce sujet



    Merci pour votre attention

  2. #2
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 052
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 052
    Par défaut
    Salut,

    Ça ne ressemble au comportement naturel d'une JList. Cela doit venir de ton code.
    Post le.

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Août 2008
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 265
    Par défaut
    Bien voilà la construction de ma JList :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    this.configurationList.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
            this.configurationList.setComponentPopupMenu(popmenu);
    Le truc c'est que j'utilise un .Form et si ça se trouve l'erreur ne vient pas de moi mais de l'initialisation du .Form.


    Sinon voici le contrôleur de ma 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
    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
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    package snec.models.audit.controllers.TaskSelection;
     
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.util.ArrayList;
    import java.util.Observable;
    import java.util.Observer;
    import javax.swing.JList;
    import javax.swing.Timer;
    import org.quartz.Trigger;
    import snec.models.audit.auditModel.AuditModel;
    import snec.models.audit.subView.componentsModels.EquipmentListModel;
     
    public class ConfigurationListController implements Observer, MouseListener, ActionListener {
     
     
        private JList configurationList;
     
        private AuditModel auditModel;
     
        public ConfigurationListController(AuditModel auditModel, JList configurationList) {
            this.auditModel = auditModel;
            this.configurationList = configurationList;
            this.auditModel.getScheduler().extractTriggerList();
            //Initialisation de la liste.
            ArrayList<String> configurationNameList = new ArrayList<String>();
            for (Trigger trigger : this.auditModel.getScheduler().getTriggerList()) {
                configurationNameList.add(trigger.getName());
            }
            EquipmentListModel listModel = new EquipmentListModel(configurationNameList);
            this.configurationList.setModel(listModel);
            this.configurationList.setSelectedIndex(0);
            String triggerName = (String) this.configurationList.getModel().getElementAt(
                    this.configurationList.getSelectedIndex());
            this.auditModel.getScheduler().setSelectedTrigger(triggerName);
        }
     
        //Mise à jour des éléments de la liste.
        public void update(Observable o, Object arg) {
            ArrayList<String> configurationNameList = new ArrayList<String>();
            for (Trigger trigger : this.auditModel.getScheduler().getTriggerList()) {
                configurationNameList.add(trigger.getName());
            }
            EquipmentListModel listModel = new EquipmentListModel(configurationNameList);
            this.configurationList.setModel(listModel);
        }
     
        //Action du clic sur la JList.
        public void mouseReleased(MouseEvent e) {
            Timer timer = new Timer(200, this);
            timer.start();
            //Pour u double clic.
            if (e.getClickCount() >1) {
                if(this.configurationList.getSelectedValue()!=null) {
                    System.out.println("MODIFY");
                }
            //Pour un simple clic.
            } else {
                String triggerName = (String) this.configurationList.getModel().getElementAt(
                        this.configurationList.getSelectedIndex());
                this.auditModel.getScheduler().setSelectedTrigger(triggerName);
                this.auditModel.change();
                //Lancement du menu contextuel (si le bouton de la souris est le bon).
                if (e.isPopupTrigger()) {
                    this.configurationList.getComponentPopupMenu().setVisible(true);
                }
            }
        }
     
        public void mouseClicked(MouseEvent e) {
        }
     
        public void mousePressed(MouseEvent e) {
        }
     
        public void mouseEntered(MouseEvent e) {
        }
     
        public void mouseExited(MouseEvent e) {
        }
     
        public void actionPerformed(ActionEvent e) {
        }
    }

    Sinon je viens de penser que c'est peut-être mon setModel() dans la mise à jour qui me sélectionne le dernier élément. Je vais vérifier ça ...


    Merci de ton attention

  4. #4
    Membre très actif
    Profil pro
    Inscrit en
    Août 2008
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 265
    Par défaut
    Bon c'est pas le setModel()

  5. #5
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 052
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 052
    Par défaut
    Pourrais-tu fournir un exemple complet d'implémentation, tout simple ?

  6. #6
    Membre très actif
    Profil pro
    Inscrit en
    Août 2008
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 265
    Par défaut
    Arf

    Euh attend je vais voir ce que je peux faire.

  7. #7
    Membre très actif
    Profil pro
    Inscrit en
    Août 2008
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 265
    Par défaut
    Bon j'ai réussi à faire un truc plutôt simple et j'en ai fait un jar :

    http://www.mediafire.com/?sharekey=d...db6fb9a8902bda

  8. #8
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 052
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 052
    Par défaut
    Oui, mais ce sont les sources qui seraient utiles !

  9. #9
    Membre très actif
    Profil pro
    Inscrit en
    Août 2008
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 265

  10. #10
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 052
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 052
    Par défaut
    Ok, je vais regarder.

  11. #11
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 052
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 052
    Par défaut
    Je t'ai dit une grooooosse bétise , c'est le comportement par défaut d'une JList. Je n'avais jamais remarqué cela !

  12. #12
    Membre très actif
    Profil pro
    Inscrit en
    Août 2008
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 265
    Par défaut
    Pas grave.

    Je vais continuer à chercher mais si quelqu'un a une idée elle est la bienvenue



    PS : je trouve que c'est un comportement très embêtant. J'ai peut-être mal fait mes listeners, mais quand je ne clique pas sur un élément de la JList ça me lance le listener du dernier élément. Je trouve ça curieux.

  13. #13
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    C'est le comportement par défaut effectivement, je n'y avais jamais fait attention. Si ça te gène vraiment, tu peux faire une JTable à la place. Avec une seule colonne.

  14. #14
    Membre très actif
    Profil pro
    Inscrit en
    Août 2008
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 265
    Par défaut
    Ben ça me gêne, oui dans le sens où si je clique sur aucun élément ça me lance tout de même l'action du dernier élément.
    Ceci dit c'est peut-être du à mon listener ...

    Bref merci pour l'idée de la JTable, je vais utiliser ça si je trouve pas mieux pour ma JList.

  15. #15
    Membre très actif
    Profil pro
    Inscrit en
    Août 2008
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 265
    Par défaut
    Bien j'ai essayé d'abord avec un JTree à la place de ma JList. Seulement je n'arrive pas à récupérer le noeud que je sélectionne autrement qu'en utilisant le valueChanged() du TreeSelectionListener. Or moi j'ai absolument besoin de le récupérer lors de ma méthode mouseReleased() du MouseListener. En effet j'ai besoin de récupérer les différentes sortes de clics.

    J'ai ensuite tenté d'utiliser une JTable comme me la conseillé Natha (merci ). Une JTable ne possède pas de méthode setSelectedCell() ou un truc équivalent. Or j'en ai également besoin.


    Non décidément c'est bien une JList qu'il me faut ... mais sans ce grmbl de problème de sélection dans le vide !

  16. #16
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Faut chercher un peu :

    JTable#setRowSelectionInterval(int, int)
    JTable#setColumnSelectionInterval(int, int)

    en combinant les 2 tu fais tout ce que tu veux.

  17. #17
    Membre très actif
    Profil pro
    Inscrit en
    Août 2008
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 265
    Par défaut
    Hum je dois commencer à devenir miro ...
    En voyant deux arguments je me disais que ça pouvait pas être ça


    *Va rechanger sa JList*

  18. #18
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Dans ce cas tu met 2 fois l'index que tu veux. Les 2 valeurs c'est pour donner une valeur min et une valeur max. Genre tu veux sélectionner les 3 premières lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table.setRowSelectionInterval(0, 2);

  19. #19
    Membre très actif
    Profil pro
    Inscrit en
    Août 2008
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 265
    Par défaut
    Oui quand j'ai vu ta réponse ça a fait tilt ! Comme quoi je suis peut-être miro mais il me reste quelques neurones encore exploitables

    Bref je viens d'adapter mon code à une JTable et ma foi, ça marche !

    Un gros merci à toi Natha !
    Mais c'est quand même désolant d'en arriver là, je hais les JList maintenant.

  20. #20
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 052
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 052
    Par défaut
    Citation Envoyé par natha Voir le message
    Si ça te gène vraiment, tu peux faire une JTable à la place. Avec une seule colonne.
    Tout à fait d'accord.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. ne pas sélectioner le dernier élément d'une JList
    Par barbiche dans le forum Composants
    Réponses: 1
    Dernier message: 22/05/2007, 13h04
  2. Réponses: 3
    Dernier message: 19/10/2006, 10h51
  3. Comment récupèrer les éléments d'une JList
    Par Orian dans le forum Composants
    Réponses: 13
    Dernier message: 10/09/2006, 12h53
  4. [VBA] sélection d'un élément dans une liste
    Par menguygw dans le forum Access
    Réponses: 3
    Dernier message: 26/04/2006, 13h18
  5. Sélection d'un élément dans une combobox
    Par cluis dans le forum IHM
    Réponses: 2
    Dernier message: 17/03/2006, 15h23

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