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

Respuestas:


205

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


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);

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.


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 + ")");
    }
  }
}

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 
        }

    }

}

4

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



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;
            }
        }
    }
}

0

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


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;
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.