Lorsque vous faites défiler un ListView
, le geste de balayage déclenche un événement de déplacement de la souris. Vous pouvez définir un indicateur lorsque l'événement de déplacement est détecté et utiliser l'événement de clic souris suivant.
public class ScrollListener {
private BooleanProperty scrolling;
public ScrollListener(Node observableNode) {
scrolling = new ReadOnlyBooleanWrapper(false);
observableNode.addEventHandler(MouseEvent.DRAG_DETECTED, e -> scrolling.set(true));
observableNode.addEventFilter(MouseEvent.MOUSE_CLICKED, evt -> {
if (scrolling.get()) {
scrolling.set(false);
evt.consume();
}
});
observableNode.addEventHandler(MouseEvent.MOUSE_EXITED, e -> scrolling.set(false));
}
public ReadOnlyBooleanProperty scrollingProperty() {
return scrolling;
}
public boolean isScrolling() {
return scrolling.get();
}
}
Une autre possibilité est d'utiliser CharmListView
de gluons, qui prend soin de la souris sur l'événement lui-même, mais (jusqu'à présent) ne soit pas aussi conveniend à utiliser comme ListView
standard, par exemple Lorsque vous avez besoin d'accéder à la SelectionModel
, comme vous pouvez le voir dans cette question: CharmListView SelectedItemProperty?
Salut, merci pour la réponse, comment puis-je intégrer votre code à mon code ci-dessus? ;) –
Vous pouvez l'appeler dans la méthode 'initialize()' du contrôleur de vue: 'new ScrollListener (listView);'. Gardez également à l'esprit que vous devez supprimer eventHandlers/filter si vous devez vous préoccuper des ressources. – jns