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 :

connaitre le déplacement réalisé lors d'un mouseDragged()


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut connaitre le déplacement réalisé lors d'un mouseDragged()
    Bonjour à tous !

    Voilà quelques temps déjà que je galère avec la méthode mouseDragged.
    Je souhaite en effet obtenir le déplacement réalisé par la souris lors d'un drag'n'drop.
    Par exemple, si l'on est en (5,5) souris cliquée et que l'on se déplace en (5,6), un évènement mouseDragged se produit et j'aimerais obtenir de cet évènement l'information comme quoi la souris s'est déplacée de +1 pixel sur y et de 0 sur x.

    Malheureusement, selon l'api, il est seulement possible d'obtenir le point "d'arrivée" de l'évènement et non le déplacement occasionné par celui-ci et encore moins son point "d'origine" (qui permettrait de déduire la translation...)

    Existe-t'il une solution ?

    Merci d'avance !
    Axel

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Bonsoir

    Le mouseDragged de déclenche de façon quasi continuelle pendant le déplacement.

    La esule chose que tu as à faire c'est de stocker le dernier point donné par le mouseDragged et de l'utiliser pou calculer le déplacement effectué lors de mouseDragged suivant

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci pour ta réponse !

    J'ai effectivement essayé cette solution, malheureusement elle comporte un gros problème :
    à partir du deuxième déplacement, aucun problème, mais au premier déplacement, les coordonnées de départ sont null (ou à une valeur affectée à l'initialisation). Il faut donc attendre le deuxième déplacement pour obtenir une valeur correcte.
    Mais le plus gros problème est qu'au second drag'n'drop, la valeur n'est pas réinitialisée, et cela entraine d'étranges phénomènes d'un point de vue graphique...
    L'idéal serait de réinitialiser la valeur sur l'évènement mouseClicked, mais c'est impossible car il s'agit d'une méthode de la classe MouseListener alors que mouseDragged appartient à MouseMotionListener, ce qui entraîne un problème de portée de la variable.

    Mais je passe sûrement à côté de quelque chose, car il doit forcément y avoir une solution !

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Bah en fait je vois pas où est le fait d'avoir à implémenter deux interface dans une seule classe...
    Donc ta classe doit implémenter MouseListener et MouseMotionListener.
    Puis tu fais en sorte de stocker la position dans un attribut de ta classe.

    Je ne vois pas vraiment où est le problème...

    Et puis plutôt que mouseClicked il faut utiliser mousePressed

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
     
    import java.awt.Point;
     
     
    public class DrDop extends JPanel implements MouseListener, MouseMotionListener {
     
        private Point lastPosition;
        @Override
        public void mouseClicked(MouseEvent e) {
            // TODO Auto-generated method stub
     
        }
     
        @Override
        public void mouseEntered(MouseEvent e) {
            // TODO Auto-generated method stub
     
        }
     
        @Override
        public void mouseExited(MouseEvent e) {
            // TODO Auto-generated method stub
     
        }
     
        @Override
        public void mousePressed(MouseEvent e) {
            lastPosition=e.getPoint();
     
        }
     
        @Override
        public void mouseReleased(MouseEvent e) {
            // TODO Auto-generated method stub
     
        }
     
        @Override
        public void mouseDragged(MouseEvent e) {
            Point p = e.getPoint();
            //................ On calcule distance on bouge les choses tout ça tout ça
            lastPosition = p;
        }
     
        @Override
        public void mouseMoved(MouseEvent e) {
            // TODO Auto-generated method stub
     
        }
     
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
     
        }
     
    }

  5. #5
    Invité
    Invité(e)
    Par défaut
    Ah merci, c'est parfait !
    En fait je n'avais tout simplement pas pensé à cette façon de faire. Jusque là j'appelais addMouseListener(...) et addMouseMotionListener(...) sur l'objet depuis une autre classe...

    Juste par curiosité, y a-t'il des cas où l'on doit utiliser de préférence les add... plutôt que les implements ?

  6. #6
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 697
    Par défaut
    Je suis pas sur de comprendre ta question.

    Il faut toujours utiliser les add...Listener(...) avec comme paramètre des objets qui implémentent les Listener correspondants. Sinok ne l'a pas détaillé ça dans l'exemple, dans son l'exemple mais ils sont bien sur nécessaires.

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

Discussions similaires

  1. Connaitre le déplacement du Scroll d'une DIV
    Par voyageurdumonde dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 18/10/2012, 04h40
  2. [Image] scintillement lors déplacement sur autre composant
    Par lilou77 dans le forum Interfaces Graphiques en Java
    Réponses: 21
    Dernier message: 07/12/2005, 09h27
  3. [TForm] Problème lors du déplacement d'une fenêtre sans barre de titre
    Par Benjamin GAGNEUX dans le forum Composants VCL
    Réponses: 3
    Dernier message: 14/10/2004, 17h10
  4. [ACCESS] Connaitre l'autoincrement lors d'un INSERT
    Par Benjamin GAGNEUX dans le forum Bases de données
    Réponses: 17
    Dernier message: 25/06/2004, 22h49
  5. Réponses: 10
    Dernier message: 01/12/2003, 23h17

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