Je suis nouveau sur JavaFX et ce dont j'ai besoin est de détecter la position de la souris lorsque l'utilisateur glisse un fichier depuis l'extérieur de mon application, comme son OS. J'ai ajouté un écouteur pour dragEntered et dragExited, comme ceci:Demande de focus tout en faisant glisser de windows
EventHandler<MouseEvent> mouseMoved = new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
logger.severe(event.getScreenX() + " : " + event.getScreenY());
}
};
scrollPane.setOnDragEntered(new EventHandler<DragEvent>() {
@Override
public void handle(DragEvent event) {
scrollPane.getScene().getWindow().requestFocus();
scrollPane.requestFocus();
event.consume();
isDragging = true;
logger.severe(event.getScreenX() + " : " + event.getScreenY());
scrollPane.addEventHandler(MouseEvent.MOUSE_MOVED, mouseMoved);
}
});
scrollPane.setOnDragExited(new EventHandler<Event>() {
@Override
public void handle(Event event) {
isDragging = false;
event.consume();
scrollPane.removeEventHandler(MouseEvent.MOUSE_MOVED, mouseMoved);
}
});
scrollPane.setOnDragDropped(new EventHandler<Event>() {
@Override
public void handle(Event event) {
isDragging = false;
event.consume();
scrollPane.removeEventHandler(MouseEvent.MOUSE_MOVED, mouseMoved);
}
});
qui détecte avec succès que l'utilisateur est entré dans mon point de vue, en faisant glisser quelque chose, mais étant donné que l'utilisateur a cliqué en dehors de ma demande, mon nœud n'a pas le focus et je Je ne peux pas non plus requestFocus, puisque l'accent est mis sur le système d'exploitation. Je ne peux donc pas ajouter un MouseEventHandler sur mon nœud scrollPane pour détecter le déplacement de la souris. J'ai besoin de ceci pour implémenter le défilement intelligent, ainsi quand l'utilisateur traîne sur mon ScrollPane, il peut déplacer la souris au fond du Node et il défilera doucement.
Quelqu'un peut-il m'aider avec ce problème?
Non testé, mais aide-t-il à demander d'abord le focus sur la fenêtre, c'est-à-dire 'scrollPane.getScene(). GetWindow(). RequestFocus()' avant d'appeler 'scrollPane.requestFocus()'? –
Merci pour votre réponse. Cela change en effet le focus sur mon application (je vois sur ma barre des tâches), mais quand même, le gestionnaire d'événements pour MOUSE_MOVED ne fonctionne pas. – Robert