Obtener la posición del mouse

109

Me gustaría simular un movimiento natural del mouse en Java (yendo de aquí para allá píxel por píxel). Para hacer eso, necesito saber las coordenadas iniciales.

Encontré el método event.getX () y event.getY () pero necesito un evento ...

¿Cómo puedo conocer las posiciones sin hacer nada (o algo no visible)?

Gracias

Martín Trigaux
fuente

Respuestas:

205

MouseInfo.getPointerInfo (). GetLocation () puede resultar útil. Devuelve un objeto Point correspondiente a la posición actual del mouse.

vpram86
fuente
46
getPointerInfo().getLocation()devuelve la posición relativa a la pantalla. Si desea la posición relativa a su componente (como la dada por MouseListeners), puede restarla yourComponent.getLocationOnScreen().
Thomas Ahle
2
En Container.getMousePosition()ocasiones, +1 puede regresar nullsi el mouse se mueve demasiado rápido, usar esto evita el problema.
Emily L.
11
Además de lo que dijo @ThomasAhle, puede evitar implementarlo usted mismo, utilizando un método de conveniencia ya implementado:SwingUtilities.convertPointFromScreen(MouseInfo.getPointerInfo().getLocation(), component)
Andrei Vajna II
1
Note MouseInfo.getPointerInfo()puede devolver un valor nulo cuando no hay mouse o en algunas configuraciones multimon.
NateS
2
Tenga en cuenta que SwingUtilities.convertPointFromScreen(..)convierte el primer argumento en el lugar y no devuelve nada, por lo que debe escribirse de manera un poco diferente en relación con el comentario de @AndreiVajnaII para que podamos obtener el Pointobjeto.
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
fuente
18
Por favor agregue la próxima vez algunos comentarios.
CSchulz
10

En SWT no necesita estar en un oyente para llegar a la ubicación del mouse. El objeto Display tiene el método getCursorLocation().

En vainilla SWT / JFace, llame Display.getCurrent().getCursorLocation().

En una aplicación RCP, llame PlatformUI.getWorkbench().getDisplay().getCursorLocation().

Para las aplicaciones SWT, es preferible utilizar getCursorLocation()el MouseInfo.getPointerInfo()que otros han mencionado, ya que este último se implementa en el kit de herramientas AWT que SWT fue diseñado para reemplazar.

stevorino
fuente
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
fuente
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
fuente
4

Intente buscar en la clase java.awt.Robot. Te permite mover el mouse mediante programación.

Jeff Storey
fuente
1

Estoy haciendo algo como esto para obtener las coordenadas del mouse usando Robot, uso estas coordenadas más en algunos de los juegos que estoy desarrollando:

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
fuente
0

Si está utilizando SWT, es posible que desee agregar un MouseMoveListener como se explica aquí .

Topher Fangio
fuente
4
pero el Listener se ejecuta solo si hago algo (mover, hacer clic) con el mouse, ¿verdad? Lo primero que necesito antes de moverlo es saber la posición de partida
Martin Trigaux
0

En mi escenario, se suponía que debía abrir un cuadro de diálogo en la posición del mouse basado en una operación de GUI realizada con el mouse. El siguiente código funcionó para mí:

    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
fuente