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 :

[MouseListener] superposition de mouseListener....


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504
    Par défaut [MouseListener] superposition de mouseListener....
    Bonjour a tous,
    je deviens folle... je dois gérer un panel C contenant des composants graphiques B de ma composition (eux même contiennent plein de A de JPanel, JScrollBar, JLabel...)
    bref en fonctionnement normal, j'ai un listener sur des composants A, pour détecter 2clik.
    dans un autre fonctionnement (déclenché par l'appui sur F2) je veux permettre a l'utilisateur de bouger les composants graphiques B.
    sauf que si biensur l'utilisateur clik sur un des composant A possedant le listener des 2clik je ne récupère plus le clik.... snif

    J'ai donc pensé mettre un glassPane pardessus mon panel C dans le cas de l'appui sur F2, j'ai donc ajouter à la JFrame contenant le panel C, un setGlassPane, en lui passant un panel que j'avais préalablement fait un setBound pour qu'il corresponde au panelC, j'avais aussi ajouter les listener sur ce panel, mais malheureusement cela ne fonctionne pas.
    je ne rentre jamais dans les listener de mon glassPane....
    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
     
      private class MyGlassPane extends JPanel {
        public MyGlassPane() {
          Rectangle r = DesignPanel.this.getBounds();
          System.out.println("MyGlassPane, r = x = " +r.x+", y="+r.y+", wi="+r.width+", hei="+r.height);
          this.setBounds(r);
          addMouseListener(getMouseListener());
          addMouseMotionListener(getMouseMotionListener());
          addKeyListener(getKeyAdapter());
          setOpaque(true);
        }
     
     
        private MouseMotionListener getMouseMotionListener() {
          return new MouseMotionListener() {
     
            public void mouseMoved(MouseEvent event) {
              Point point = event.getPoint();
              Component component = getComponentAt(point);
              System.out.println("DesignPanel,mouseMoved : Component = "+component.getClass().getName());
    ......
            }
     
            public void mouseDragged(MouseEvent event) {
              System.out.println("DesignPanel,mouseDragged : ************** !! , design =" +design);
    ...............
            }
     
          };
        }
     
     
        private MouseListener getMouseListener() {
          return new MouseAdapter() {
     
            public void mousePressed(MouseEvent event) {
              if (design) {
                System.out.println("DesignPanel : MousePressed.");
              }
    .........
            }
     
     
          };
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      public void setDesignMode(boolean design) {
        this.design = design;
        if (design) {
          pac7000UI.setGlassPane(new MyGlassPane());
        } else {
          pac7000UI.setGlassPane(null);
        }
      }
    avez vous une autre idée ? ou comment faire pour iniber les listener présent sur mes composants ?

  2. #2
    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,
    Tu peux avoir plusieurs MouseListeners sur un seul composant. Je te recommande tout de meme de n'en utiliser qu'un seul et de le placer dans le composant qui doit réagir au plus haut niveau.

    Tu a une méthode qui s'appelle getComponentAt() dans Container, je crois. Elle peut t'aider à déterminer sur quel composant de C l'utilisateur a cliqué. Tu n'as alors plus besoin que d'un seul listener, C.

    Essaie un truc comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public Component getSubComponentAt(int x, int y) {
      Component ret = this;
      Component child = ret.getComponentAt(x, y);
      while(!ret.equals(child)) {
        ret = child;
        child = ret.getComponentAt(x, y);
      }
      return ret;
    }
    "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.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504
    Par défaut
    pas mal du tout,
    car j'allais te repondre mais je ne sais pas ou sont mes composant, il y a trop d'imbriquation, mais en fait toi justement tu gere ses imbrication, pour qu'on récupère le composant visible le plus 'haut' ... si j'ai bien compris.... c'est trop fort.
    je vais essayer cela tout de suite.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504
    Par défaut
    j'ai pas du tout comprendre.
    mon panel C contient des composants graphiques B qui contiennent des A.

    j'ai mis en commentaire tous listener sur A et B, j'ai seulement laissé celui de C. malheureusement je ne recoit pas forcement tous dans mon listener.
    si je clik sur certain composant A (contenu dans le ViewPort d'un JScrollPane de B), je ne recois aucun évènenement ...
    pourtant il ne reste plus aucun MouseAdpater sauf celui de mon Panel C!!!

    le probleme vient surment que mon Panel C est tout en dessous, et au dessus de lui figure des composant, qui indirectement récupère le clik ? non

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504
    Par défaut
    up

  6. #6
    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
    Ben, la je ne sais pas trop.
    Je ne peux que te proposer une méthode un peu crade :
    tous tes composants implémentent MouseListener et appellent une méthode de C qui prend un MouseEvent en parametre.

    De toute facon, je crois que le code que je t'ai donné ne sert à rien, vu que getSource() sur le MouseEvent doit te renvoyer le composant sur lequel l'utilisateur a cliqué.
    "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.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504
    Par défaut
    ok merci comme meme, je vais essayer plustard.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504
    Par défaut
    est ce que quelqu'un verrait une autre solution, j'aurais vraiment bien voulu avoir une sorte de glassPane (un panel transparent sui serait au desus de mon panel C (sui contient tout mes composant) et une fois que il y a un clik c'est lui qui le récupère et qui gère.

    J'ai essayé de mettre un glassPanel sur ma JFrame, mais comme je ne veux pas que ce glassPane soit sur toute la frame mais a un endroit précis j'ai fait un setBound(RectangleVoulu) mais je ne récupère rien sur ces listeners...

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504
    Par défaut
    Citation Envoyé par xavlours
    Ben, la je ne sais pas trop.
    Je ne peux que te proposer une méthode un peu crade :
    tous tes composants implémentent MouseListener et appellent une méthode de C qui prend un MouseEvent en parametre.
    Ca y est j'ai implémenté et cela fonctionne bien. tanpis pour la propreté. lol.

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

Discussions similaires

  1. [Debutant] MouseListener et ListSelectionListener
    Par Vader_666 dans le forum Composants
    Réponses: 4
    Dernier message: 04/02/2008, 15h00
  2. Problème de MouseListener multiples
    Par pierre.zelb dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 23/06/2005, 11h18
  3. MouseListener sur Shape !
    Par zigg dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 25/10/2004, 21h03
  4. [JFrame] [MouseListener] recupérer evenement souris
    Par kikoufr dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 19/08/2004, 18h45
  5. [MouseListener] Confusion de listener
    Par i.took.the.red.pill dans le forum Agents de placement/Fenêtres
    Réponses: 14
    Dernier message: 18/06/2004, 14h42

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