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

AWT/Swing Java Discussion :

[débutant][MouseListener]Composants étanches aux événements.


Sujet :

AWT/Swing Java

  1. #1
    Membre confirmé
    Avatar de lejimi
    Homme Profil pro
    Écrivain public
    Inscrit en
    Mai 2004
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Écrivain public
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2004
    Messages : 182
    Points : 483
    Points
    483
    Billets dans le blog
    2
    Par défaut [débutant][MouseListener]Composants étanches aux événements.
    Bonjour,

    j'ai créé une interface à base de JInternalFrame. Ceux-ci écoutent la souris pour pouvoir afficher un menu contextuel en cas de clic droit.

    Mes JInternalFrames contiennent des composants (hérités de JLabel) qui écoutent la souris en vue d'exploiter les clics gauche mais ne font rien de particulier avec les clics droits.

    Mon problème est que si je fait un clic droit sur un de ces JLabels, mon JInternalFrame, situé derrière, n'entend rien (donc mon menu contextuel ne s'affiche pas) Je voudrais savoir comment faire pour que mes JInternalFrame puissent entendre les clics droit "à travers" les JLabel. J'avais pensé à une méthode fireMouseEvent() mais... elle n'existe pas...

    Merci,

    LJM
    Gloire à qui n'ayant pas d'idéal sacro-saint
    Se borne à ne pas trop emmerder ses voisins.


    Mon tutoriel pour débuter avec Inkscape
    D'autres tutoriels intéressants dans la rubrique Open Source
    Et n'oubliez pas la FAQ Open Source !

  2. #2
    Membre averti
    Avatar de Strab
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 338
    Points : 330
    Points
    330
    Par défaut
    Le fait d'appeler dans le MouseListener de tes JLabel la méthode mouseClicked du MouseListener du JInternalFrame ne fonctionne pas ?

    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
     
    class MaFrame extends JInternalFrame implements MouseListener
    {
       public MaFrame(){
          add(new MonLabel(this));
          AddMouseListener(this);
       }
    }
     
    class MonLabel extends JLabel implements MouseListener
    {
        private MaFrame maFrame;
        public MonLabel(MaFrame frame){
           maFrame = frame;
           addMouseListener(this);
        }
     
        public void mouseClicked(MouseEvent evt){
            maFrame.mouseClicked(evt);
        }
    }

  3. #3
    Membre confirmé
    Avatar de lejimi
    Homme Profil pro
    Écrivain public
    Inscrit en
    Mai 2004
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Écrivain public
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2004
    Messages : 182
    Points : 483
    Points
    483
    Billets dans le blog
    2
    Par défaut
    C'est tout con du coup ça ne peut que marcher. Il ne m'était jamais venu à l'idée que l'on pouvait appeler directement, avec ses petits doigts boudinés, ce genre de méthodes.

    Par contre, ton bout de code implique que maFrame soit un champ de monLabel (fourni à la construction ?) et ça, ça ne m'arrange pas forcément. Est-ce que je peux appeler une méthode statique de maFrame qui a son tour appellera this.mouseClicked() ?

    Trouant ce truc là...

    LJM

    [edit] ou alors monLabel.getParent().mouseClicked() ?
    Gloire à qui n'ayant pas d'idéal sacro-saint
    Se borne à ne pas trop emmerder ses voisins.


    Mon tutoriel pour débuter avec Inkscape
    D'autres tutoriels intéressants dans la rubrique Open Source
    Et n'oubliez pas la FAQ Open Source !

  4. #4
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Exactement, avec getParent. Tu peux meme mettre une boucle du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public void mouseClicked(MouseEvent e) {
      //si clic droit
      Component c = getParent();
      while(! c instanceof JInternalFrame) c = c.getParent();
      ((MouseListener)c).mouseClicked(e);
    }
    [edit]Comme ca, tu ne te soucies plus de mettre des JPanels aux layouts divers et variés les uns dans les autres.
    "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.

  5. #5
    Membre confirmé
    Avatar de lejimi
    Homme Profil pro
    Écrivain public
    Inscrit en
    Mai 2004
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Écrivain public
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2004
    Messages : 182
    Points : 483
    Points
    483
    Billets dans le blog
    2
    Par défaut
    Effectivement ! Je me l'étais d'ailleurs dit :

    Citation Envoyé par lejimi
    "getParent() va me retourner un JPanel sourd comme un pot et je vais encore l'avoir dans le c...omponent"
    Donc, il faut boucler pour remonter tout l'empilement des composant jusqu'à celui qui m'intéresse !

    Voilà un cas de figure sur lequel je ne suis sans doute ni le premier ni le dernier à me casser les dents. Ca mériterait presque une rubrique dans les FAQ

    Merci pour le coup de main()

    LJM
    Gloire à qui n'ayant pas d'idéal sacro-saint
    Se borne à ne pas trop emmerder ses voisins.


    Mon tutoriel pour débuter avec Inkscape
    D'autres tutoriels intéressants dans la rubrique Open Source
    Et n'oubliez pas la FAQ Open Source !

  6. #6
    Membre confirmé
    Avatar de lejimi
    Homme Profil pro
    Écrivain public
    Inscrit en
    Mai 2004
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Écrivain public
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2004
    Messages : 182
    Points : 483
    Points
    483
    Billets dans le blog
    2
    Par défaut Ne pas vendre la peau de l'Ours (ni celle du xav)
    Vérification faite, ça marche très bien, mais il y avait un piège sur lequel je vient de perdre deux plombes comme un con. J'ai ajouté un MouseListener à mes JInternalFrame, mais ce Listener est ma fenêtre principale !

    La boucle while doit donc commencer par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(!(c instanceof maFrame)
    Sinon, ça compile, mais l'exécution déclenche une ClassCastException, car les JInternalFrame ne sont pas des MouseListener par défaut. Alors que ma fenêtre principale dérive de JFrame et implémente bel et bien MouseListener...
    Gloire à qui n'ayant pas d'idéal sacro-saint
    Se borne à ne pas trop emmerder ses voisins.


    Mon tutoriel pour débuter avec Inkscape
    D'autres tutoriels intéressants dans la rubrique Open Source
    Et n'oubliez pas la FAQ Open Source !

  7. #7
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Citation Envoyé par lejimi
    Ne pas vendre la peau de l'Ours (ni celle du xav)
    Essaye toujours, je t'attends ...

    Sinon, c'est vrai que mon code était faux, il faut changer le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(! c instanceof JInternalFrame)
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(! c instanceof MouseListener)
    , ou par une classe définie par l'utilisateur.
    "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.

  8. #8
    Membre confirmé
    Avatar de lejimi
    Homme Profil pro
    Écrivain public
    Inscrit en
    Mai 2004
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Écrivain public
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2004
    Messages : 182
    Points : 483
    Points
    483
    Billets dans le blog
    2
    Par défaut
    Non, non, c'est moi qui ai mal rédigé mon premier post. J'y ai bien écrit que mes JInternalFrame écoutaient la souris, alors qu'en fait c'est mon JFrame.

    En fait nous diront qu'il suffit de remonter jusqu'à l'écouteur voulu, quel qu'il soit
    Gloire à qui n'ayant pas d'idéal sacro-saint
    Se borne à ne pas trop emmerder ses voisins.


    Mon tutoriel pour débuter avec Inkscape
    D'autres tutoriels intéressants dans la rubrique Open Source
    Et n'oubliez pas la FAQ Open Source !

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 05/05/2007, 19h51
  2. [Débutant][C#] Comment gérer les événements ?
    Par aDamas dans le forum Windows Forms
    Réponses: 11
    Dernier message: 14/12/2005, 00h16
  3. Recherche bêta-testeurs pour composant accès aux données
    Par Rémi Remoussenard dans le forum Access
    Réponses: 4
    Dernier message: 29/11/2005, 23h00
  4. Composant graphic "transparent" aux événements sou
    Par jmborbe dans le forum Composants VCL
    Réponses: 5
    Dernier message: 04/11/2005, 17h17
  5. [Débutant] SWT: composant Texte avec \n
    Par bonnefr dans le forum SWT/JFace
    Réponses: 3
    Dernier message: 18/05/2004, 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