seguiTopo

intercettare i movimenti del mouse

È possibile intercettare le azioni che l'utente esegue con il mouse su un oggetto (qui faremo esempi con il mouse ma si possono intercettare anche altre azioni), nell'introduzione dei Canvas avevamo già disegnato sul canvas intercettando il trascinamento del mouse.

Per fare un esperimento potremmo creare un programma che contiene un canvas chiamaro tela a cui collegheremo 3 gestori di eventi:

tela.addEventHandler(MouseEvent.MOUSE_MOVED, e -> gestisciMovimento(e));
tela.addEventHandler(MouseEvent.MOUSE_DRAGGED, e -> gestisciTrascinamento(e));
tela.addEventHandler(MouseEvent.MOUSE_CLICKED, e -> gestisciClick(e));

Il metodo che gestisce il modimento del mouse disegna semplicemente un quadratino giallo sotto al puntatore.

public void gestisciMovimento(MouseEvent e) {
	gc.setFill(Color.YELLOW);
	gc.fillRect(e.getX() - 2, e.getY() - 2, 5, 5);
}

gestisciTrascinamento(e) fa esattamente la stessa cosa soltanto che il quadratino è di colore rosso.

Anche gestisciClick(e) fa un lavoro analogo soltanto che disegna un cerchio blu di diametro 9 pixel.

Provando il programma sarà possibile vedere le differenze tra i diversi eventi.

In questo programma abbiamo usato un modo diverso per intercettare gli eventi: pulsante.addEventHandler(ActionEvent.ACTION, e->azionePulsante()).

finora avevamo usato la funzione setOnAction() soltanto in relazione ai Button, addEventHandler ci sonsente di collegare più gestori a seconda dell'evento che occorre: il primo parametro è l'evento che siamo interessati a gestire e il secondo è il gestore incaricato (si potrebbe specificare in diversi modi, questo è il più sintetico che possiamo usare con java8).