2010-05-31 48 views

Respuesta

19

Es necesario utilizar Robot

Esta clase se utiliza para generar eventos de entrada del sistema nativo para los propósitos de la automatización de pruebas, demostraciones autoejecutables, y otras aplicaciones donde se necesita el control del ratón y el teclado. El objetivo principal de Robot es facilitar las pruebas automatizadas de las implementaciones de la plataforma Java.

El uso de la clase para generar eventos de entrada difiere de la publicación de eventos en la cola de eventos AWT o componentes AWT en que los eventos se generan en la cola de entrada nativa de la plataforma. Por ejemplo, Robot.mouseMove realmente mover el cursor del ratón en lugar de sólo la generación de eventos de movimiento del ratón ...

+0

Muy bien, gracias. Eso parece exactamente lo que necesito. –

18

Como otros han dicho, esto se puede lograr usando Robot.mouseMove(x,y). Sin embargo, esta solución tiene una caída cuando se trabaja en una situación de múltiples monitores, ya que el robot funciona con el sistema de coordenadas de la pantalla principal, a menos que especifique lo contrario.

Aquí es una solución que permite pasar las coordenadas cualquier pantalla global basada punto:

public void moveMouse(Point p) { 
    GraphicsEnvironment ge = 
     GraphicsEnvironment.getLocalGraphicsEnvironment(); 
    GraphicsDevice[] gs = ge.getScreenDevices(); 

    // Search the devices for the one that draws the specified point. 
    for (GraphicsDevice device: gs) { 
     GraphicsConfiguration[] configurations = 
      device.getConfigurations(); 
     for (GraphicsConfiguration config: configurations) { 
      Rectangle bounds = config.getBounds(); 
      if(bounds.contains(p)) { 
       // Set point to screen coordinates. 
       Point b = bounds.getLocation(); 
       Point s = new Point(p.x - b.x, p.y - b.y); 

       try { 
        Robot r = new Robot(device); 
        r.mouseMove(s.x, s.y); 
       } catch (AWTException e) { 
        e.printStackTrace(); 
       } 

       return; 
      } 
     } 
    } 
    // Couldn't move to the point, it may be off screen. 
    return; 
} 
+0

¿Funciona en la plataforma Linux? –

+2

@ Daniel - pasaron años desde que respondió aquí, pero hoy lo encontré y ha resuelto un problema que había tenido durante muchos meses con clics inadvertidos del mouse al reposicionar el cursor de texto. Estuve tentado de usar Robot.mouseMove hasta que leí tu comentario. Extrañamente, ¡recién había comenzado a usar una configuración de monitores múltiples! Como usas clases con las que no estoy familiarizado, me sorprendió que todo lo que tenía que hacer era copiar tu código, hacer algunas importaciones y llamarlo. ¡Buen trabajo! ¡¡Gracias!! – DSlomer64

Cuestiones relacionadas