2009-09-17 41 views
86

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.Obtener posición del mouse

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

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

Gracias

Respuesta

178

MouseInfo.getPointerInfo().getLocation() podría ser útil. Devuelve un objeto Point correspondiente a la posición actual del mouse.

+40

'getPointerInfo(). GetLocation()' devuelve la posición relativa a la pantalla. Si desea la posición relativa a su componente (como la proporcionada por MouseListeners) puede restar 'yourComponent.getLocationOnScreen()' de ella. –

+2

+1 'Container.getMousePosition()' algunas veces puede devolver 'null' si el mouse se mueve demasiado rápido, usando esto evita el problema. –

+0

podemos saber dónde se hace clic con el ratón en pantalla natural – Srb

2

Si está utilizando oscilación como su capa de interfaz de usuario, se puede utilizar un Mouse-Motion Listener para esto.

2

Intenta mirar la clase java.awt.Robot. Le permite mover el mouse programáticamente.

0

Si está utilizando SWT, es posible que desee ver en la adición de un MouseMoveListener como se explica here.

+4

pero el Oyente se ejecuta solo si hago algo (mover, hacer clic) con el mouse, ¿verdad?Lo primero que necesito antes de moverlo es conocer la posición inicial –

30
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); 
+13

Agregue la próxima vez algunos comentarios. – CSchulz

8

En SWT no necesita estar en un oyente para obtener 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 aplicaciones SWT, es preferible usar getCursorLocation() sobre 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.

0

En mi caso, yo tenía que abrir una ventana de diálogo en la posición del ratón sobre la base de una operación de interfaz gráfica de usuario hace con el ratón. El siguiente código que 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; 
} 
5
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 + ")"); 
    } 
    } 
} 
4
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 
     } 

    } 

} 
0

que estoy haciendo algo como esto para conseguir coordenadas del ratón usando robot, utilizo estas coordenadas aún 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; 
      } 
     } 
    } 
} 
Cuestiones relacionadas