Soucis moussePressed & mousseDragged

Résolu
FiReTiTi Messages postés 54 Date d'inscription lundi 20 mars 2006 Statut Membre Dernière intervention 28 septembre 2007 - 21 déc. 2006 à 10:27
FiReTiTi Messages postés 54 Date d'inscription lundi 20 mars 2006 Statut Membre Dernière intervention 28 septembre 2007 - 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...

6 réponses

FiReTiTi Messages postés 54 Date d'inscription lundi 20 mars 2006 Statut Membre Dernière intervention 28 septembre 2007
3 janv. 2007 à 11:36
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 :(
3
cs_physio Messages postés 26 Date d'inscription vendredi 1 novembre 2002 Statut Membre Dernière intervention 3 février 2007 2
22 déc. 2006 à 22:48
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¥§íØ
0
FiReTiTi Messages postés 54 Date d'inscription lundi 20 mars 2006 Statut Membre Dernière intervention 28 septembre 2007
22 déc. 2006 à 23:49
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.
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
23 déc. 2006 à 13:38
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
FiReTiTi Messages postés 54 Date d'inscription lundi 20 mars 2006 Statut Membre Dernière intervention 28 septembre 2007
2 janv. 2007 à 15:29
Bonjour et bonne année.
Merci pour la réponse, mais je n'arrive pas à taper "super.moussePressed()", Eclipse affiche une erreur de syntase :(
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
2 janv. 2007 à 15:38
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
0
Rejoignez-nous