2010-05-31 14 views

risposta

19

è necessario utilizzare Robot

Questa classe viene utilizzata per generare eventi di input system nativo a fini di test automation, demo auto-esecuzione, e altre applicazioni che richiedono il controllo del mouse e della tastiera. Lo scopo principale di Robot è di facilitare il test automatico delle implementazioni della piattaforma Java.

L'utilizzo della classe per generare eventi di input è diverso dagli eventi di registrazione alla coda eventi AWT o ai componenti AWT in quanto gli eventi vengono generati nella coda di input nativa della piattaforma. Ad esempio, Robot.mouseMove sarà effettivamente spostare il cursore del mouse invece di generando eventi spostamento del mouse ...

+0

Grande, grazie. Sembra esattamente quello di cui ho bisogno. –

18

Come altri hanno detto, questo può essere realizzato utilizzando Robot.mouseMove(x,y). Tuttavia questa soluzione ha una rovina quando si lavora in una situazione multi-monitor, in quanto il robot lavora con il sistema di coordinate della schermata principale, a meno che non si specifichi diversamente.

Ecco una soluzione che permette di passare le coordinate qualsiasi schermata globale punto base:

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

Funziona sulla piattaforma linux? –

+2

@ Daniel - sono passati anni da quando hai risposto qui, ma oggi l'ho trovato e ho risolto un problema che avevo da molti mesi con i clic involontari del mouse che riposizionavano il cursore del testo. Sono stato tentato di usare solo Robot.mouseMove fino a quando ho letto il tuo commento. Stranamente, avevo appena iniziato a usare un setup multi-monitor! Dato che usi lezioni che non mi sono familiari, sono rimasto scioccato dal fatto che tutto ciò che dovevo fare era copiare il tuo codice, fare alcune importazioni e chiamarlo. Buon lavoro! Grazie!! – DSlomer64

Problemi correlati