Rilevazione trascinamento del mouse: mouseDrag

Spesso è utile poter rilevare i casi in cui l'utente ha premuto il pulsante del mouse e ha poi spostato il cursore tenendo premuto il pulsante. Una operazione di questo tipo si chiama trascinamento (drag). Molti programmi di disegno richedono l'uso di questa operazione.

La rilevazione del trascinamento avviene attraverso una funzione mouseDrag, simile alla funzione di rilevazione del click. In particolare, ha gli stessi argomenti:

  public boolean mouseDrag(Event e, int x, int y) {
    Graphics g=new Graphics();

    istruzioni

    return true;
  }
Questa funzione viene attivata quando viene rilevato un movimento del mouse mentre il pulsante è tenuto premuto. È anche importante notare che questa funzione non viene attivata in tutti i punti attraversati dal cursore. Si può dire che vale invece l'inverso: se la funzione viene attivata (ossia si eseguono le istruzioni al suo interno) allora vuol dire che il punto di coordinate x e y è stato attraversato mentre il pulsante è stato tenuto premuto.

Il seguente esempio PuntiDrag.java disegna dei punti nelle posizioni in cui il mouse viene premuto, come fa anche PuntiMouse.java. In più, disegna dei punti anche se il cursore viene spostato tenendo il pulsante premuto.

/*
  Disegna dei punti, sulla base del click del mouse
*/

import java.awt.*;

public class PuntiDrag extends java.applet.Applet {
  public boolean mouseDown(Event e, int x, int y) {
    Graphics g=getGraphics();

    g.fillRect(x-2,y-2,4,4);

    return true;
  }

  public boolean mouseDrag(Event e, int x, int y) {
    Graphics g=getGraphics();

    g.fillRect(x-2,y-2,4,4);

    return true;
  }
}

Un possibile miglioramento è quello di fare in modo che i punti non vengano cancellati ogni volta che la finestra diventa invisibile. È chiaramente sufficiente introdurre delle variabili globali per rappresentare i punti, e una funzione paint che li ridisegna ogni volta.