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 :

Detecter un JPanel lorsque la souris est relachée dessus


Sujet :

AWT/Swing Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Detecter un JPanel lorsque la souris est relachée dessus
    Bonjour,

    Voici mon problème. Je dois réaliser un simulateur de circuits logiques sous java. Chaque composant de mon circuit logique contient un certain nombre d'entrées et de sorties. Pour relier les entrées de certains composants aux sorties d'autres composant, je dispose d'objet "Connexion". Chaque entrée a comme attibut un objet connexion qui n'est rien d'autre qu'une référence vers une sortie d'un autre composant.

    Ce que je voudrais faire c'est pouvoir, sur l'interface graphique, sélectionner avec la souris les deux extrémité (l'entrée et la sortie) d'une connexion pour l'établir. J'ai décidé d'affecter aux objet Input_Graphique (la version "interface graphique" de mon objet entrée) un MouseAdapter qui, lorsqu'on presse la souris sur un Input_Graphique, crée un nouvel objet connexion. Ce que je ne parviens pas à faire, c'est de faire en sorte que lorsque l'utilisateur relache le bouton de la souris sur une sortie, après l'avoir enfoncé sur une entrée, il génère l'objet connexion (qu'il attribue à l'entrée) en lui affectant la sortie sur laquelle la souris a été relachée.

    J'ai toutefois une toute petite idée, mais qui me semble extrêmement barbare... Ca serait de mettre une références sur toutes les sorties de tous les composants dans le MouseAdapter de l'entrée puis, de rechercher parmis toutes ses sorties, celle dont les frontières entourent les coordonnées de la souris. Mais ca me semble un peu énorme... quelqu'un a-t-il plus simple ?

    Merci !

  2. #2
    Membre chevronné
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Oui, c'est ce que je voudrais utiliser. Seulement, j'ai toujours un problème. Si j'applique MousePressed sur une entrée (Input), c'est le MousePressed du MouseAdapter associé à l'Input qui se déclenche. Il va engendrer la création d'un objet connexion. Mais lorsque je relache le bouton de la souris au-dessus d'une sortie (Output), c'est toujours le MouseReleased associé au MouseAdapter de l'objet Input qui va se déclencher, non ? Dès lors le MouseAdapter associé à l'Input ne saura pas "détecter" que le bouton a été relaché sur un autre objet. La seule idée que j'ai, c'est de mémoriser qq part les coordonnées du point où a été relaché le bouton et ensuite de rechercher, parmis toutes les sorties, si il y en a une qui se trouve à ce point de coordonnée. Mais ca me semble trop compliqué à faire... Il doit il y avoir plus simple, non ?

    Comment faire pour que, en quelque sorte, le MouseAdapter associé à l'Input sache sur quel Output le bouton de la souris a été relaché ? C'est ca le vrai problème...

  4. #4
    Membre chevronné
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    Plutôt que d'utiliser les xxxxxAdapter - qui pour moi sont à reserver à des traitements minim (fermer une fenetre ou une application etc.) -, implémente l'interface WindowListener.

    Ensuite tu ajoutes les listeners de cette façon :
    monInput.addWindowListener(lePanelContenantTousLesComposants);
    monOutput.addWindowListener(lePanelContenantTousLesComposants);

    Dans le Panel (ou Fenetre) contenant tous tes composants, tu devras redéfinir les méthodes mousePressed, mouseReleased etc.. :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public void mousePressed(MouseEvent e){
       if(e.getSource()==monInput){
          // Mémoriser qqpart (attribut, liste etc.) que monInput a été clické
          [...]
       }
    }
     
    public void mouseReleased(MouseEvent e){
       if(e.getSource()==monOutput){
          // Aller rechercher le composant clické précédemment (s'il y en a un).
          [...]
       }
    }
    Cette méthode de faire est certe un peu plus longue niveau écriture de code, mais est beaucoup plus claire et adaptable.

    [EDIT]
    Pour répondre à ta question en gras en utilisant ma méthode on pourrait faire quelque chose comme ça :
    public void mouseReleased(MouseEvent e){
    Input i=this.methodePermettantDeRecupererLeComposantClickePrecedemment();
    i.notifierRelease(e.getSource());
    }

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Ah super ! Merci bcp iohack ! Ca répond tout à fait à ma question ! Tu me débloques d'un sacré problème, là ! Je commençais à m'arracher les cheveux... Il faut dire que c'est ma première interface graphique, alors je galère un petit peu...

    Bon, je vais essayer ca et je te dirai si ca a marché ! Encore merci !

  6. #6
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Enfin pour ce genre de choses tu peux également te tourner vers un framework pré existant tel que la visual library de Netbeans
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  7. #7
    Membre chevronné
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    Si il débute dans les interface graphiques, je maintiens le fait qu'il progressera bien plus vite en codant tout soit-même à la mimine.
    Une fois les interfaces graphiques à la miminie maîtrisées, là ok, utiliser ce genre de chose peut faire gagner un gain de temps énorme.

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/03/2010, 01h36
  2. detecter quand le bouton de la souris est enfoncée
    Par snoopy3 dans le forum GTK+ avec C & C++
    Réponses: 7
    Dernier message: 10/03/2008, 09h48
  3. Réponses: 6
    Dernier message: 09/03/2008, 15h54
  4. Masquer un div lorsque la souris n'est plus dessus
    Par Agoye dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 27/04/2006, 20h50
  5. Savoir quand une hotkey est relachée
    Par kriterium dans le forum Composants VCL
    Réponses: 2
    Dernier message: 24/07/2004, 14h44

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