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 :

dispatch : ne marche pas?


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut dispatch : ne marche pas?
    Salut,

    J'ai une MainFrame (qui étend JFrame) ainsi qu'un contentPane (un JPanel) et un glassPane (un JPanel aussi).

    J'ai ajouté un MouseMotionListener et un MouseListener sur mon glassPane, à ce moment là les "clics" ne peuvent donc pas être écoutés par les composants contenus dans mon contentPane.
    Je fais donc des tests, si le glassPane doit gérer le clic, il le gère, sinon je veux qu'il le dispatch sur le contentPane.
    Je fais donc ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private void dispatchEvent(MouseEvent e) {
        System.out.println("dispatch");
        MouseEvent event = SwingUtilities.convertMouseEvent(e.getComponent(), e, mainFrame.getContentPane());
        mainFrame.getContentPane().dispatchEvent(event);
    }
    Cette méthode est bien appelée quand je le souhaite (ça affiche "dispatch"), mais les clics ne sont pas pris en compte sur le contentPane (il y a des JButton dessus, il ne reçoivent pas les events).

    Si je désactive le glassPane (setVisible(false)), ils les reçoivent bien.

    Je ne comprends pas, j'ai déjà utilisé le dispatch, ça marchait très bien, j'ai regardé le code source qui marchait bien (dans un autre contexte), j'ai fait exactement pareil (enfin apparemment non)... et ça ne marche pas...

    Une idée?

  2. #2
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    En fait pour être plus précis, l'évènement arrive bien au contentPane, mais si contentPane l'ignore, il n'est pas transmis (comme lors d'un clic) aux éléments contenus...

  3. #3
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Bon je m'en suis sorti avec ceci...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    private void dispatchEvent(MouseEvent e) {
        System.out.println("dispatch");
        Point p = e.getPoint();
        Component comp = SwingUtilities.getDeepestComponentAt(mainFrame.getContentPane(), p.x, p.y);
        if (comp != null) {
            MouseEvent event = SwingUtilities.convertMouseEvent(e.getComponent(), e, comp);
            comp.dispatchEvent(event);
        }
    }
    Je ne sais pas si c'est correct, est-ce toujours le deepest composant qui prend l'évènement?

  4. #4
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par ®om
    Je ne sais pas si c'est correct, est-ce toujours le deepest composant qui prend l'évènement?
    En particulier, ça ne génère pas à la fois le mouseEntered pour un composant et le mouseExited pour un autre (alors que ça devrait).
    Comment réaliser ceci proprement?
    (pour l'instant je garde dans un attribut le point du mousePressed, et renvoie l'évènement sur le pointCourant et le point du mousePressed)

Discussions similaires

  1. 'SHOW TABLES' marche pas sous postgresql !?
    Par fet dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 13/05/2004, 09h28
  2. Maximiser fenêtre ne marche pas
    Par sandrinec dans le forum Composants VCL
    Réponses: 2
    Dernier message: 12/06/2003, 12h02
  3. Réponses: 9
    Dernier message: 07/05/2003, 12h57
  4. [GifDecoder] marche pas dans applet avec IE
    Par formentor dans le forum Applets
    Réponses: 2
    Dernier message: 06/05/2003, 10h43
  5. Sysdate qui marche pas ??
    Par StouffR dans le forum Langage SQL
    Réponses: 4
    Dernier message: 28/08/2002, 13h23

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