Obtenir la position de la souris

109

Je voudrais simuler un mouvement naturel de souris en Java (allant d'ici à là pixel par pixel). Pour ce faire, j'ai besoin de connaître les coordonnées de départ.

J'ai trouvé la méthode event.getX () et event.getY () mais j'ai besoin d'un événement ...

Comment puis-je connaître les positions sans rien faire (ou quelque chose qui n'est pas visible)?

Je vous remercie

Martin Trigaux
la source

Réponses:

206

MouseInfo.getPointerInfo (). GetLocation () peut être utile. Il renvoie un objet Point correspondant à la position actuelle de la souris.

vpram86
la source
46
getPointerInfo().getLocation()renvoie la position par rapport à l'écran. Si vous voulez la position relative à votre composant (comme celle donnée par MouseListeners), vous pouvez en soustraire yourComponent.getLocationOnScreen().
Thomas Ahle
2
+1 Container.getMousePosition()peut parfois revenir nullsi la souris se déplace trop vite, l'utilisation de cette option évite le problème.
Emily L.
11
En plus de ce que @ThomasAhle a dit, vous pouvez éviter de l'implémenter vous-même, en utilisant une méthode de convinience déjà implémentée:SwingUtilities.convertPointFromScreen(MouseInfo.getPointerInfo().getLocation(), component)
Andrei Vajna II
1
Remarque MouseInfo.getPointerInfo()peut renvoyer null lorsqu'il n'y a pas de souris ou dans certaines configurations multimon.
NateS
2
Notez que SwingUtilities.convertPointFromScreen(..)convertit le premier argument sur place et ne renvoie rien, il doit donc être écrit un peu différemment par rapport au commentaire @AndreiVajnaII afin que nous puissions mettre la main sur l' Pointobjet.
Evgeni Sergeev
42
PointerInfo a = MouseInfo.getPointerInfo();
Point b = a.getLocation();
int x = (int) b.getX();
int y = (int) b.getY();
System.out.print(y + "jjjjjjjjj");
System.out.print(x);
Robot r = new Robot();
r.mouseMove(x, y - 50);
Nauman Khalid
la source
18
Veuillez ajouter quelques commentaires la prochaine fois.
CSchulz
10

Dans SWT, vous n'avez pas besoin d'être dans un auditeur pour accéder à l'emplacement de la souris. L'objet Display a la méthode getCursorLocation().

Dans SWT / JFace vanille, appelez Display.getCurrent().getCursorLocation().

Dans une application RCP, appelez PlatformUI.getWorkbench().getDisplay().getCursorLocation().

Pour les applications SWT, il est préférable d'utiliser getCursorLocation()ce MouseInfo.getPointerInfo()que d'autres ont mentionné, car ce dernier est implémenté dans la boîte à outils AWT que SWT a été conçu pour remplacer.

stevorino
la source
6
import java.awt.MouseInfo;
import java.awt.GridLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;

import javax.swing.*;

public class MyClass {
  public static void main(String[] args) throws InterruptedException{
    while(true){
      //Thread.sleep(100);
      System.out.println("(" + MouseInfo.getPointerInfo().getLocation().x + 
              ", " + 
              MouseInfo.getPointerInfo().getLocation().y + ")");
    }
  }
}
Srb
la source
6
import java.awt.MouseInfo;
import java.util.concurrent.TimeUnit;

public class Cords {

    public static void main(String[] args) throws InterruptedException {

        //get cords of mouse code, outputs to console every 1/2 second
        //make sure to import and include the "throws in the main method"

        while(true == true)
        {
        TimeUnit.SECONDS.sleep(1/2);
        double mouseX = MouseInfo.getPointerInfo().getLocation().getX();
        double mouseY = MouseInfo.getPointerInfo().getLocation().getY();
        System.out.println("X:" + mouseX);
        System.out.println("Y:" + mouseY);
        //make sure to import 
        }

    }

}
Josh McQuinn
la source
4

Essayez de regarder la classe java.awt.Robot. Il vous permet de déplacer la souris par programme.

Jeff Storey
la source
1

Je fais quelque chose comme ça pour obtenir les coordonnées de la souris à l'aide de Robot, j'utilise ces coordonnées plus loin dans quelques-uns des jeux que je développe:

public class ForMouseOnly {
    public static void main(String[] args) throws InterruptedException {
        int x = MouseInfo.getPointerInfo().getLocation().x;
        int y = MouseInfo.getPointerInfo().getLocation().y;
        while (true) {

            if (x != MouseInfo.getPointerInfo().getLocation().x || y != MouseInfo.getPointerInfo().getLocation().y) {
                System.out.println("(" + MouseInfo.getPointerInfo().getLocation().x + ", "
                        + MouseInfo.getPointerInfo().getLocation().y + ")");
                x = MouseInfo.getPointerInfo().getLocation().x;
                y = MouseInfo.getPointerInfo().getLocation().y;
            }
        }
    }
}
Varun Ved
la source
0

Si vous utilisez SWT, vous voudrez peut-être envisager d'ajouter un MouseMoveListener comme expliqué ici .

Topher Fangio
la source
4
mais l'écouteur n'est exécuté que si je fais quelque chose (bouger, cliquer) avec ma souris, non? La première chose dont j'ai besoin avant de le déplacer est de connaître la position de départ
Martin Trigaux
0

Dans mon scénario, j'étais censé ouvrir une boîte de dialogue à la position de la souris basée sur une opération GUI effectuée avec la souris. Le code suivant a fonctionné pour moi:

    public Object open() {
    //create the contents of the dialog
    createContents();
    //setting the shell location based on the curent position
    //of the mouse
    PointerInfo a = MouseInfo.getPointerInfo();
    Point pt = a.getLocation();
    shellEO.setLocation (pt.x, pt.y);

    //once the contents are created and location is set-
    //open the dialog
    shellEO.open();
    shellEO.layout();
    Display display = getParent().getDisplay();
    while (!shellEO.isDisposed()) {
        if (!display.readAndDispatch()) {
            display.sleep();
        }
    }
    return result;
}
sudipn
la source