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 + JPopupMenu] Problèmes d'association des deux composants


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 [JList + JPopupMenu] Problèmes d'association des deux composants
    Bonjour à tous,

    Je tente en ce moment d'implémenter un JPopupMenu sur une JList.
    J'ai deux problèmes, à savoir :

    -Lorsque que je clique gauche, mon menu contextuel s'ouvre normalement, seulement je veux que l'élément sur lequel j'ai cliqué se sélectionne. En gros je dois avoir le même comportement que lorsque je fais un simple clic droit. Je pensais que cela aurait du être un comportement normal de la JList, mais décidément elle n'a pas fini de me décevoir celle-là ...

    -Ensuite lorsque je clique sur aucun élément de ma JList, elle m'affiche ma JPopupMenu. Mais je voudrais pouvoir dans ce cas indiquer aux éléments de mon menu qu'ils doivent se griser en utilisant setEnabled(). Seulement je n'arrive pas à déterminer si je clique réellement sur un élément de ma JList ou pas. Cela revient un peu au même souci que j'avais ici :
    http://www.developpez.net/forums/d60...element-jlist/
    Non résolu d'ailleurs ...


    Bref voici mon contrôleur, celui qui est chargé de gérer les clics de la souris sur 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
    public void mouseReleased(MouseEvent e) {
            /*
         Ici se trouvait le code sauvegardant l'élément sélectionné dans un
         attribut d'une classe. Ceci me permet de pouvoir le conserver même si je
         clique sur un autre élément de ma fenêtre.
            */
            Timer timer = new Timer(200, this);
            timer.start();
            if (e.isPopupTrigger()) {
                this.view.getPopupMenu().show(e.getComponent(), e.getX(), e.getY());
            }
            if (e.getClickCount() > 1) {
                if (this.configurationList.getSelectedValue() != null) {
                     //Modification
                }
            } 
        }
    Je vous ai simplifié le code inutile pour ne garder que l'essentiel, mais si vous voulez plus de détails ...



    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
    Citation Envoyé par Larger Voir le message
    Ensuite lorsque je clique sur aucun élément de ma JList, elle m'affiche ma JPopupMenu.
    Tu as associé le listener a la JList donc le popup s'affiche des que tu clique dans la Jlist. Normal.

    Pour différencier le clic droit du clic gauche tu as une méthode static dans SwingUtilities. Quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SwingUtilities.isLeftMouseBouton(MouseEvent)
    SwingUtilities.isRightMouseBouton(MouseEvent)
    Avant d'afficher ta popup, à toi de vérifier qu'un (ou plusieurs) élément a bien été sélectionné.

  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
    Citation Envoyé par visiwi Voir le message
    Tu as associé le listener a la JList donc le popup s'affiche des que tu clique dans la Jlist. Normal.
    C'est pas faux, mais je vais pas m'amuser à affecter mon listener à chaque élément de ma JList si ?

    Citation Envoyé par visiwi Voir le message
    Pour différencier le clic droit du clic gauche tu as une méthode static dans SwingUtilities. Quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SwingUtilities.isLeftMouseBouton(MouseEvent)
    SwingUtilities.isRightMouseBouton(MouseEvent)
    Effectivement j'ai vu que cette méthode existait. Mais j'ai également vu que ce n'était pas très portable. Si tout autre bouton que celui de la souris -utilisé par un système bizarroïde sans aucun doute- est utilisé comme l'équivalent d'un clic droit, il ne se passera rien.


    Citation Envoyé par visiwi Voir le message
    Avant d'afficher ta popup, à toi de vérifier qu'un (ou plusieurs) élément a bien été sélectionné.
    C'est bien ça que j'aimerais arriver à faire :/

  4. #4
    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 Larger Voir le message
    C'est pas faux, mais je vais pas m'amuser à affecter mon listener à chaque élément de ma JList si ?
    Non, ce que tu as fait est bien. Il suffit ensuite de récupérer les objets sélectionné.

    Citation Envoyé par Larger Voir le message
    Mais j'ai également vu que ce n'était pas très portable. Si tout autre bouton que celui de la souris -utilisé par un système bizarroïde sans aucun doute- est utilisé comme l'équivalent d'un clic droit, il ne se passera rien.
    Exact.

    Citation Envoyé par Larger Voir le message
    C'est bien ça que j'aimerais arriver à faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    JList list = new JList();
    int[] selections = list.getSelectedIndices();

  5. #5
    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
    Alors j'ai transformé ma JList en JTable, mais le comportement global reste le même. Le problème du clic dans le ide est donc réglé.

    En fait je suis pas sûr d'avoir bien formulé mon autre souci. Quand je clique droit avec ma souris ma JPopupMenu s'ouvre bien et au bon endroit. Maintenant je cherche à récupérer la cellule sur laquelle j'ai cliqué droit. J'utilise pour cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int row = this.jTable.getSelectedRow();
    Seulement ce code là me renvoie bien la dernière cellule sélectionnée ... par le clic gauche ! En clair mon clic droit n'entraîne pas la sélection de la cellule sur laquelle j'ai cliquée.

    J'ai tenté de faire un PopupMenuListener afin de changer la cellule sélectionnée juste avant que mon menu se lance. Mais comme je n'arrive pas à récupérer la valeur de la cellule sur laquelle je clique droit ...

  6. #6
    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
    Mais c'est le comportement normal. Il doit avoir une sélection et le popup qui s'ouvre est en relation avec la sélection.
    Ainsi si tu fait toi-même (par du code) une sélection sur ton clic droit tu inhibe la multi-sélection, a moins que cela soit ce que tu veux.
    Dans ce cas tu récupère le point du clic (e.getPoint()) et ensuite tu cherche à savoir qu'elle est la cellule situé dans ta JTable à ce point (il y a une méthode pour ça, mais m'en souviens plus -> voir javadoc). Quand tu as cette cellule, enfin la ligne et la colonne, tu sélectionne toi-même la cellule par du code, puis tu ouvre ton popup.
    Mais le comportement naturel me parait mieux.

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

Discussions similaires

  1. problème liste affichage des deux plus grands nombres
    Par LeGenTleManfr dans le forum Général Python
    Réponses: 8
    Dernier message: 05/11/2012, 20h13
  2. Problème d'installation des composant Orpheus
    Par Claude l'ancien dans le forum Composants VCL
    Réponses: 5
    Dernier message: 08/06/2011, 12h01
  3. problème en installant des composants TMS pour BCB6
    Par chamamo dans le forum C++Builder
    Réponses: 3
    Dernier message: 13/06/2008, 09h41
  4. Réponses: 1
    Dernier message: 06/07/2006, 19h20
  5. Réponses: 1
    Dernier message: 09/12/2005, 09h16

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