2010-05-31 8 views

Répondre

19

Vous devez utiliser Robot

Cette classe est utilisée pour générer des événements d'entrée du système natif aux fins de l'automatisation des tests, des démonstrations d'auto-course, et d'autres applications où le contrôle de la souris et le clavier est nécessaire. Le but principal de Robot est de faciliter les tests automatisés des implémentations de la plate-forme Java. L'utilisation de la classe pour générer des événements d'entrée diffère des événements d'enregistrement dans la file d'attente d'événements AWT ou les composants AWT en ce sens que les événements sont générés dans la file d'attente d'entrée native de la plateforme. Par exemple, Robot.mouseMove va réellement déplacer le curseur de la souris au lieu de simplement générer des événements de déplacement de la souris ...

+0

Grand, merci. Cela ressemble exactement à ce dont j'ai besoin. –

18

Comme d'autres l'ont dit, cela peut être réalisé en utilisant Robot.mouseMove(x,y). Toutefois, cette solution a un impact négatif lorsque vous travaillez dans une situation multi-moniteur, car le robot fonctionne avec le système de coordonnées de l'écran principal, sauf indication contraire.

Voici une solution qui vous permet de passer une coordination globale écran à points:

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

Cela fonctionne-t-il sur la plate-forme Linux? –

+2

@ Daniel - Cela fait des années que vous avez répondu ici, mais aujourd'hui je l'ai trouvé et il a résolu un problème que j'avais eu pendant plusieurs mois avec des clics de souris par inadvertance repositionner le curseur de texte. J'ai été tenté d'utiliser Robot.mouseMove jusqu'à ce que je lise votre commentaire. Bizarrement, je venais de commencer à utiliser une configuration multi-moniteurs! Puisque vous utilisez des cours avec lesquels je ne suis pas familier, j'ai été choqué que tout ce que j'avais à faire était de copier votre code, de faire quelques importations et de l'appeler. Bon travail! Merci!! – DSlomer64

Questions connexes