2010-08-27 21 views
2

J'écris une classe qui permettra aux utilisateurs sur d'autres ordinateurs de contrôler le contenu d'un JPanel, pour une utilisation dans un système d'affichage partagé. java.awt.Robot me permettra d'effectuer des clics de souris et une saisie au clavier, mais il n'a pas de méthode mouseDragged(MouseEvent evt). Mon client a clientMouseReleased (et Pressed) méthodes dans le cadre d'un auditeur MouseAdapter qui ressemble à:Comment java.awt.Robot peut-il être amené à répondre aux événements de glisser de la souris?

private void clientMouseReleased(java.awt.event.MouseEvent evt) 
{ 
    try 
    { 
     switch (evt.getButton()) 
     { 
      case 1: 
       remoteDesktop.mouseRelease(evt.getX(), evt.getY(), InputEvent.BUTTON1_MASK); 
       break; 
      case 2: 
       remoteDesktop.mouseRelease(evt.getX(), evt.getY(), InputEvent.BUTTON2_MASK); 
       break; 
      case 3: 
       remoteDesktop.mouseRelease(evt.getX(), evt.getY(), InputEvent.BUTTON3_MASK); 
       break; 
     } 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
     JOptionPane.showMessageDialog(this, e.getMessage()); 
    } 
} 

Lorsque le remoteDesktop est une classe contenant une java.awt.Robot, et il exécute une Robot.mouseMove et Robot.mouseRelease (ou Robot.mousePress) dans la méthode que le client appelle. Je voudrais pouvoir écrire le mouseDragged de la même manière, à savoir, comme ceci:

private void clientMouseDragged(java.awt.event.MouseEvent evt) 
{ 
    try 
    { 
     switch (evt.getButton()) 
     { 
      case 1: 
       remoteDesktop.mouseDragged(evt.getX(), evt.getY(), InputEvent.BUTTON1_MASK); 
       break; 
      case 2: 
       remoteDesktop.mouseDragged(evt.getX(), evt.getY(), InputEvent.BUTTON2_MASK); 
       break; 
      case 3: 
       remoteDesktop.mouseDragged(evt.getX(), evt.getY(), InputEvent.BUTTON3_MASK); 
       break; 
     } 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
     JOptionPane.showMessageDialog(this, e.getMessage()); 
    } 
} 

Répondre

0

Eh bien, l'idée de haut niveau est que vous devez ajouter l'état de la souris à votre programme. Votre remoteDesktop devra conserver l'état de la souris. Ensuite, lors des actions de presse et de relâchement de la souris, vous devez définir le drapeau de manière appropriée.

Ensuite, vous devez ajouter une logique dans le code de déplacement de la souris.

if (mouseDown) 
    handelDrag(); 
else 
    handleMove(); 

C'est l'idée générale de la façon dont j'allais y aller.