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

Java Discussion :

Listener sur une classe "distante"


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations forums :
    Inscription : Juin 2002
    Messages : 256
    Par défaut Listener sur une classe "distante"
    Bonjour,

    Je suis tout débutant en Java, et je souhaite connaître tout simplement la position de la souris. Alors je sais qu'il me faut un MouseMotionListener, mais je ne sais pas comment l'appliquer dans mon cas.

    En effet, je dispose d'une fenêtre codée dans deux fichiers nommés MainFrame et DrawPanel. Je ne peux toucher à ces fichiers. J'ai donc créé un troisième fichier, nommé gfx_tools chargé d'écouter la fenêtre (c'est un objet DrawPanel). Après, dans mon gfx_tools, j'ai les fonctions mouseMoved et mouseDragged chargées de récupérer les infos.

    Le petit problème, c'est que je ne sais pas du tout comment dire à java qu'il faut écouter l'objet DrawPanel déjà créé (qui fait partie du même fichier .jar). J'ai essayé de faire une procédure "SetListener(DrawPanel Panel)" qui exécute

    Panel.addMouseMotionListener( Panel );

    mais quand je compile, il me dit ne pas connaître DrawPanel. Je ne suis qu'à moitié étonné, sauf que je ne sais pas comment résoudre ce problème... En gros, il me faudrait un moyen d'avoir une variable globale qui soit l'instance de ma classe.

    Comment faire ?

    Merci

    Cordialement

  2. #2
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Déjà, est-ce que tu sais le faire quand tout le code vient de toi ?
    Si ton objet DrawPanel est un JPanel, tu as forcément une méthode addMouseListener.

    En ce cas, il y a peu de chance que le code utile soit Panel.addMouseMotionListener( Panel ) comme tu l'indiques, mais plutot quelque chose comme Panel.addMouseMotionListener(monListener) : il arrive qu'un panneau s'écoute lui même, mais d'après ce que tu dis tu veux justement écouter le DrawPanel de l'extérieur.

    Sinon il faut savoir comment récupérer l'objet de classe DrawPanel ; je ne comprends pas très bien si tu y es arrivé ou pas ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations forums :
    Inscription : Juin 2002
    Messages : 256
    Par défaut
    Merci pour votre réponse

    Lorsque le code vient de moi, je "sais" le faire. Entre guillemets car les seuls codes que j'ai fait sont très rudimentaires..
    Sinon, je ne suis pas sûr de comprendre ton deuxième point, mais dans les sources de la classe, l'auteur n'a pas mis de listener sur cette classe. Le MouseListener en question est utilité dans la classe dérivée MainFrame (que je ne peux pas modifier non plus).

    Je me suis mal exprimé : mon problème est justement que je ne sais pas récupérer l'objet DrawPanel. Comment peut-on faire ?

    Merci

    Cordialement

  4. #4
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Il faut créer une instance de ton DrawPanel, puis faire un addMouseMotionListener dessus. Cependant, l'instance est créer dans la classe MainFrame, que tu ne peux pas modifier.
    Deux cas se présentent :
    1. MainFrame extends JFrame : prend l'instance de MainFrame, puis récupère le DrawPanel via monFrame.getContentPane.getComponent( int ) en faisant des instanceof pour trouver le DrawPanel
    2. MainFrame a un attribut JFrame : récupérer l'instance par introspection, puis suivre le premier cas.

    Une fois l'instance DrawPanel récupérée, il suffit de faire le addMouseMotionListener.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations forums :
    Inscription : Juin 2002
    Messages : 256
    Par défaut
    Coup de bol... ma MainFrame dérive de JDialog, pas de JFrame...

    Comme je suis super super débutant, je ne sais pas trop utilier l'introspection... j'ai bien compris que les trucs genre getClass, etc... étaient puissant, mais je ne sais pas comment les utiliser...

    Une petite indication ?

    merci

    Cordialement

  6. #6
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Donc tu n'as pas besoin de faire de l'introspection, tu es dans le cas 1) décrit plus haut.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

Discussions similaires

  1. Réponses: 3
    Dernier message: 22/09/2009, 21h34
  2. Réponses: 14
    Dernier message: 14/03/2005, 09h16
  3. [MFC] Problème pointeur sur une classe
    Par mick74 dans le forum MFC
    Réponses: 7
    Dernier message: 14/04/2004, 14h17

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