Soucis moussePressed & mousseDragged [Résolu]

FiReTiTi 54 Messages postés lundi 20 mars 2006Date d'inscription 28 septembre 2007 Dernière intervention - 21 déc. 2006 à 10:27 - Dernière réponse : FiReTiTi 54 Messages postés lundi 20 mars 2006Date d'inscription 28 septembre 2007 Dernière intervention
- 3 janv. 2007 à 11:36
Bonjour,

je souhaite utiliser la souris pour gérer les rotations d'un objet dans mon application 3D. Pour cela, j'ai besoin des coordonnées du clic au moment où l'on presse le bouton puis des coordonnés du pointeur quand le bouton est enfoncé.
Mais il y a un souci, voilà l'exemple :

[CODE]
public class Souris3D implements MouseListener, MouseMotionListener, MouseWheelListener
{
private int OldX, OldY ;
...
public void mousePressed(MouseEvent me) // Quand on presse sur le bouton
    {
    OldX = me.getX() ;
    OldY = me.getY() ;
    System.out.println("mousePressed Old = " + OldX + " " + OldY + "-------------------------->>>>>>>>>>>>>>>>>>") ;
    }
...
public void mouseDragged(MouseEvent me) // Mouvement de la souris bouton enfoncé.
    {
    System.out.println("mouseDragged : " + me.getX() + " " + me.getY() + " Old = " + OldX + " " + OldY) ;
    OldX = me.getX() ;
    OldY = me.getY() ;
    }
...
}

[\CODE]

Mais entre les deux fonctions, les valeurs de OldX et OldY sont perdues, voilà l'affichage :
[CODE]
mousePressed Old = 558 439-------------------------->>>>>>>>>>>>>>>>>>
mouseDragged : 558 431 Old = 345 324
mouseDragged : 558 424 Old = 558 431
mouseDragged : 557 422 Old = 558 424

[\CODE]

On voit que dans le méthode moussePress les valeurs sont changées, mais dans la méthode mousseDragged elles sont différentes.

Est ce que quelqu'un sait pourquoi ?
Si oui, comment contourner le souci ?

Merci par avance...
Afficher la suite 

6 réponses

Répondre au sujet
FiReTiTi 54 Messages postés lundi 20 mars 2006Date d'inscription 28 septembre 2007 Dernière intervention - 3 janv. 2007 à 11:36
+3
Utile
Bonjour,

je viensde résoudre le problème : il faut déclarer les variables OldX et OldY en static !!! Mais je ne sais pas pourquoi ça marche :(
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de FiReTiTi
cs_physio 26 Messages postés vendredi 1 novembre 2002Date d'inscription 3 février 2007 Dernière intervention - 22 déc. 2006 à 22:48
0
Utile
Bonjour ,

moi juste le code suivant fonctionne :

public class TestSouris extends JFrame {

    private int oldX, oldY;

    public TestSouris() {

        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.addMouseListener(new MouseAdapter() {
                            public void mousePressed(MouseEvent e) {

                                        oldX = e.getX();
                                        oldY = e.getY();
                                        System.out.println("mousePressed Old = " + oldX + " " + oldY
                                                                                    + "-------------------------->>>>>>>>>>>>>>>>>>");

            }

        });

        this.addMouseMotionListener(new MouseMotionListener() {

            public void mouseDragged(MouseEvent e) {
                System.out.println("mouseDragged" + e.getX() + " " + e.getY()
                        + " OLD " + oldX + " " + oldY);

                oldX = e.getX();
                oldY = e.getY();

            }

            public void mouseMoved(MouseEvent e) {

            }

        });

    }

    public static void main(String[] args) {

        TestSouris frame = new TestSouris();
        frame.setSize(300, 300);
        frame.setVisible(true);
    }

}

n'as tu pas d'autre endroit de ton code qui modifie les valeurs de oldX et oldY ?
essaye d'executer en mode pas a pas pour voir ou est modifiée ta variable

bonne chance

PH¥§íØ
Commenter la réponse de cs_physio
FiReTiTi 54 Messages postés lundi 20 mars 2006Date d'inscription 28 septembre 2007 Dernière intervention - 22 déc. 2006 à 23:49
0
Utile
Bonsoir,

merci pour l'aide, mais :
 - j'ai besoin d'utiliser "public class Souris3D implements MouseListener, MouseMotionListener, MouseWheelListener" et non pas une JFrame.
 - ma classe contient exactement ce que j'ai marqué. Les trois petits points signifient que je n'ai pas marqué les autres fonctions que j'ai été obligé d'implémenter, mais qui sont VIDES.
Commenter la réponse de FiReTiTi
Twinuts 5261 Messages postés dimanche 4 mai 2003Date d'inscription 20 avril 2018 Dernière intervention - 23 déc. 2006 à 13:38
0
Utile
Salut,

tu peux t'inspirer de ce code qui permet de bouger une fenêtre sans forcément passer par la barre de titre :

import java.awt.Frame;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;

public class DragWindow extends MouseAdapter implements MouseMotionListener {
    private Frame    frame        = null;
    private int        mousePrevX    = 0;
    private int        mousePrevY    = 0;
    private int        frameX        = 0;
    private int        frameY        = 0;

    public DragWindow(Frame frame){
        this.frame = frame;
    }
   
    public void mousePressed(MouseEvent e) {
        super.mousePressed(e);
        mousePrevX = e.getX();
        mousePrevY = e.getY();
        frameX = 0;
        frameY = 0;
    }

    public void mouseDragged(MouseEvent e) {
        dragged(e.getPoint());
    }

    private void dragged(Point p) {
        int X = p.x;
        int Y = p.y;
        int msgX = 0;
        int msgY = 0;
        msgX =frame.getX();
        msgY = frame.getY();
        if (msgX 0 && msgY 0)            msgX msgY 1;

        int moveX = X - mousePrevX; // Negative if move left
        int moveY = Y - mousePrevY; // Negative if move down        if (moveX 0 && moveY 0)
            return;
        mousePrevX = X - moveX;
        mousePrevY = Y - moveY;

        // mouseDragged caused by setLocation() on frame.        if (frameX msgX && frameY msgY) {
            frameX = 0;
            frameY = 0;
            return;
        }

        // '-' would cause wrong direction for movement.
        int newFrameX = msgX + moveX;
        // '-' would cause wrong
        int newFrameY = msgY + moveY;

        frameX = newFrameX;
        frameY = newFrameY;

        frame.setLocation(newFrameX, newFrameY);

    }

    public void mouseMoved(MouseEvent e) {
    }

}

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Commenter la réponse de Twinuts
FiReTiTi 54 Messages postés lundi 20 mars 2006Date d'inscription 28 septembre 2007 Dernière intervention - 2 janv. 2007 à 15:29
0
Utile
Bonjour et bonne année.
Merci pour la réponse, mais je n'arrive pas à taper "super.moussePressed()", Eclipse affiche une erreur de syntase :(
Commenter la réponse de FiReTiTi
Twinuts 5261 Messages postés dimanche 4 mai 2003Date d'inscription 20 avril 2018 Dernière intervention - 2 janv. 2007 à 15:38
0
Utile
Salut et bonne année à tous(et toutes),

pour faire "super.moussePressed()" il te faut hériter de MouseAdapter alors sérieux prend la classe que je te donne texto limite tu bidouille comme tu peux et de la lu la considère comme un objet fini et autonome dans ton application

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Commenter la réponse de Twinuts

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.