El siguiente código es un ejemplo para conocer cómo se puede detectar si el usuario ha pulsado algún botón del ratón sobre la ventana que se ha creado en JavaFX.
Para que la detección se haga en cualquier parte de la ventana, se han utilizado los métodos setOnMouse_____ que ofrece la clase Scene, pero si se deseara conocer si se ha pulsado el ratón sobre algún elemento concreto de la ventana, también existen métodos similares para las clases herededas de la clase Node, como por ejemplo Canvas, ImageView, y todos los tipos de contenedores (StackPane, HBox, VBox, Group, etc).
El ejemplo mostrará en la salida estándar si se ha pulsado algún botón del ratón indicando las coordenadas dentro de la ventana en la que se ha pulsado, y de la misma manera ocurre si se suelte el botón, o si se hace clic con algún botón del ratón (clic = pulsar + soltar). Además, en el control realizado para detectar clic en algún botón, se indica si se ha hecho con el botón principal o con el secundario, lo cual se podrá hacer de manera similar en cualquiera de los otros eventos del ratón.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.input.MouseButton;
import javafx.scene.input.MouseEvent;
import javafx.stage.Stage;
public class JavaFXMouseEventsSample extends Application {
@Override
public void start(Stage primaryStage) {
Group root = new Group();
Scene scene = new Scene(root, 300, 250);
primaryStage.setScene(scene);
primaryStage.show();
// Detectar ratón pulsado
scene.setOnMousePressed((MouseEvent mouseEvent) -> {
// Insertar aquí el código a ejecutar cuando se pulse el ratón
System.out.println("Ratón pulsado en (x, y): (" +
mouseEvent.getX() + ", " + mouseEvent.getY() + ")");
});
// Detectar ratón soltado
scene.setOnMouseReleased((MouseEvent mouseEvent) -> {
// Insertar aquí el código a ejecutar cuando se suelte el ratón
System.out.println("Ratón soltado en (x, y): (" +
mouseEvent.getX() + ", " + mouseEvent.getY() + ")");
});
// Detectar clic en ratón (pulsado y soltado)
scene.setOnMouseClicked((MouseEvent mouseEvent) -> {
// Insertar aquí el código a ejecutar cuando se haga clic en el ratón
System.out.println("Ratón clicado en (x, y): (" +
mouseEvent.getX() + ", " + mouseEvent.getY() + ")");
// También se puede comprobar sobre qué botón se ha actuado,
// válido para cualquier acción (pressed, released, clicked, etc)
if(mouseEvent.getButton() == MouseButton.PRIMARY) {
System.out.println("Botón principal");
} else if(mouseEvent.getButton() == MouseButton.SECONDARY) {
System.out.println("Botón secundario");
}
});
/* Más información:
En la API de JavaFX para la clase Scene se puede ver los distintos
métodos existentes para detectar eventos del ratón. Son aquellos
cuyo nombre empieza por setOnMouse......
https://docs.oracle.com/javase/8/javafx/api/javafx/scene/Scene.html
*/
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}