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 :

mouseClicked et mouseReleased


Sujet :

AWT/Swing Java

  1. #1
    Membre habitué Avatar de hammag
    Profil pro
    Inscrit en
    Février 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 511
    Points : 145
    Points
    145
    Par défaut mouseClicked et mouseReleased
    salut,

    j’ai un petit pb avec mouseReleased et mouseClicked,
    en fait dans mon application j’ai plusieurs panels et chaque panel a un MouseListner,
    quand je déplace un panel avec la souris et quand je relâche le programme exécute la fct mouseReleased, pas de pb
    mais après, si je clique sur ce dernier panel avec la souris il exécute une autre fois la fct mousReleased et non mousClicked
    est-ce qu'il y'a qu pour m'aider.

  2. #2
    Membre habitué Avatar de White Rabbit
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 122
    Points : 148
    Points
    148
    Par défaut
    Quelles opérations fais-tu dans ton mouseReleased() ?

  3. #3
    Membre actif Avatar de Belegkarnil
    Inscrit en
    Juin 2005
    Messages
    289
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Juin 2005
    Messages : 289
    Points : 205
    Points
    205
    Par défaut
    peut être a tu écoutes-tu deux composant l'un sur l'autre. Ce qui double l'action. non?

    Si tu ne vois pas, donne ton code ici.

  4. #4
    Membre habitué Avatar de hammag
    Profil pro
    Inscrit en
    Février 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 511
    Points : 145
    Points
    145
    Par défaut
    Non, j'ai aucuns composants superposés,

    pour mon code, en fait mon programme est un client VoIP, et les panels sont sensés représenter des poste téléphoniques, si je faire déplacer un panel sur un autre panel quand je lache le téléphone representé par le 1er panel appel le télphone représenté par le 2ème panel.
    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
     
     
    public void mouseClicked(MouseEvent e) {}
     
    //---------------------------------------------
    public void mouseReleased(MouseEvent e){
     
            setLocation(x_origine, y_origine);
     
            System.out.println(y_lache+"  "+y_origine);
     
           //Trouver le numéro de la source 
            for(int i = 0; i<Panels_phones.size(); i++)
              {
                  if (Panels_phones.get(i).y_origine == y_origine)
                      source = i;
              }
     
     
            if ((y_lache >= y_origine)&&(y_lache < y_origine+16))
                 System.out.println("Attention Vous ête sur le même numéro");
             else
             {
                int cible = quel_objet(y_lache); 
                 if (cible != -1) 
                 {
                     System.out.println("Objet touché numéro :"+cible); 
     
                    //effectuer l'appel
     
          Appeler(phones.get(source).Num,phones.get(cible-1).Num,managerConnect);
     
     
                    System.out.println("managerConnect = "+managerConnect.toString());
                    System.out.println("source = "+phones.get(source).Num);
     
                     System.out.println("dest = "+phones.get(quel_objet(y_lache)-1).Num);
     
                 }
             }
           }
    comme vous voyer dans la fonction mouseClicked il n'y a aucun ligne de code mais si je fait la manip de glisser lacher sur un objet et ensuite juste que je clique sur ce dernier objet et la fct mouseReleased est exécuter une autre foi.

  5. #5
    Membre habitué Avatar de hammag
    Profil pro
    Inscrit en
    Février 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 511
    Points : 145
    Points
    145
    Par défaut
    ????

  6. #6
    Membre éclairé Avatar de warwink
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 650
    Points : 823
    Points
    823
    Par défaut
    Autant ne pas écrire du code inutile si tu n'as rien dans MouseClicked

  7. #7
    Membre habitué Avatar de hammag
    Profil pro
    Inscrit en
    Février 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 511
    Points : 145
    Points
    145
    Par défaut
    effectivement j'ai essayé d'enlevé mouseClicked mais le message d'erreur suivant apparait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    test.panel is not abstract and does not override abstract method mouseClicked(java.awt.event.MouseEvent) in java.awt.event.MouseListener
    panel est la classe pour créer mes panels:

    class panel extends JPanel implements MouseListener, MouseMotionListener{

  8. #8
    Membre habitué Avatar de hammag
    Profil pro
    Inscrit en
    Février 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 511
    Points : 145
    Points
    145
    Par défaut

  9. #9
    Membre chevronné
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Points : 2 011
    Points
    2 011
    Par défaut
    Citation Envoyé par hammag
    effectivement j'ai essayé d'enlevé mouseClicked mais le message d'erreur suivant apparait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    test.panel is not abstract and does not override abstract method mouseClicked(java.awt.event.MouseEvent) in java.awt.event.MouseListener
    panel est la classe pour créer mes panels:

    class panel extends JPanel implements MouseListener, MouseMotionListener{
    Etant donné que tu implémente l'interface MouseListener tu es OBLIGE de fournir une implémentation pour chacune des méthodes de cette interface même si l'implémentation est vide, c'est pour cette raison que tu ne peux pas enlever la méthode mouseClicked de ta classe.

    Sinon le fait que la méthode mouseReleased soit appelé quand tu clique sur ton panel n'est pas étonnant dans la mesure où quand tu clique tu relache le bouton non?
    En fait les 2 méthodes mouseClicked et mouseReleased sont appelés, tu peux le vérifier en faisant afficher un message dans ta méthode mouseClicked.

    -"Tout ça me paraît très mal organisé. Je veux déposer une réclamation. Je paye mes impôts, après tout!"
    -"JE SUIS LA MORT, PAS LES IMPÔTS! MOI, JE N'ARRIVE QU'UNE FOIS".

    Pieds d'argile (1996), Terry Pratchett 1948 - 2015
    (trad. Patrick Couton)

  10. #10
    Membre habitué Avatar de hammag
    Profil pro
    Inscrit en
    Février 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 511
    Points : 145
    Points
    145
    Par défaut
    Je récapitule :

    Après le lancement de mon application et si je clique sur un panel : les deux fonctions mouseClicked et mouseReleased sont appelées tout les deux en m temps.

    Si je bouge un panel et je relâche, la fonction mouseReleased est appelée seule (normale),
    Mais, après si je clique sur ce dernier panel, seulement la fonction mouseReleased est appelée, et moi je veux appeler la fonction mouseClicked.

    NB : les autres panels que j’ai pas touché reste normale.

  11. #11
    Membre actif
    Avatar de dam_moreyllo
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    251
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 251
    Points : 227
    Points
    227
    Par défaut
    Bonjour,
    Je n'en suis pas sur du tout, mais si tu essayais, dans ta fonction MouseReleased, de tester si l'evenement est du a un MOUSE_DRAGGED :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (e.getModifiersEx() == MOUSE_DRAGGED) {...}
    Peut etre que ça evitera que ton code soit executé quand tu ne fais que cliquer...

  12. #12
    Membre habitué Avatar de hammag
    Profil pro
    Inscrit en
    Février 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 511
    Points : 145
    Points
    145
    Par défaut
    Problème persiste ...

  13. #13
    Membre éclairé Avatar de BizuR
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    688
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 688
    Points : 757
    Points
    757
    Par défaut
    il me semble que ce qui va distinguer l'appel de MouseReleased à MouseClick sera le temps sur lequel tu resteras appuyer sur la souris, autrement dit,

    Tu appelleras MouseClicked et MouseReleased si tu fais un click simple
    Tu appelleras MouseReleased uniquement si tu maintiens le bouton appuyé

    (bon jusque la, je n'apporte rien de très nouveau je présume...)

    En aucun cas tu ne pourras éviter ces appels ... il faut donc que tu parviennes à n'executer le code que lorsque tu presses longuement le bouton... pour cela, tu peux utiliser une variable (un boolean) propre a ton objet qui va detecter un DRAG d'un CLIC et passer a true qd il faudra effectué le code (lors du DRAG donc)... tu peux donc faire :
    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
    public class Truc implements MouseListener,MouseMotionListener{
    private boolean isDragged=false;
    ...
    public void mouseDragged(e){
    isDragged=true;
    }
    public void mouseReleased(e){
    if (isDragged){
    ... //ton code
    isDragged=false;
    }
    }
    ...
    }


    Apres,il existe peut être des méthodes plus simples ou plus propres mais il me semble avoir déjà effectué une opération similaire lors d'un de mes précédents projets
    See you, space cowboy... and if you're satisfied, click on

  14. #14
    Membre habitué Avatar de hammag
    Profil pro
    Inscrit en
    Février 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 511
    Points : 145
    Points
    145
    Par défaut
    Ca marche, merci BizuR et tous les autres.

  15. #15
    Membre éclairé Avatar de BizuR
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    688
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 688
    Points : 757
    Points
    757
    Par défaut
    Pense au tag dans ce cas si possible
    See you, space cowboy... and if you're satisfied, click on

Discussions similaires

  1. [C#]Capter le MouseClick droite
    Par layouni dans le forum Windows Forms
    Réponses: 1
    Dernier message: 19/07/2006, 09h09
  2. Réponses: 4
    Dernier message: 16/05/2006, 17h27
  3. [Applet][JFrame]Mouseclick
    Par MarcAn dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 28/04/2006, 00h27
  4. [MouseReleased] Probleme de detection....
    Par lilou77 dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 12/12/2005, 10h04
  5. Envoie Mouseclick et MouseMove à une appli DirectX
    Par cpdump dans le forum DirectX
    Réponses: 3
    Dernier message: 21/11/2003, 14h48

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