Wenn Sie eine ListView
scrollen, löst die Wischgeste ein Mausereignis aus. Sie können ein Flag festlegen, wenn das Ziehereignis erkannt wird, und das folgende Mausklick-Ereignis konsumieren.
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();
}
}
Eine andere Möglichkeit ist es, Sie Gluon die Verwendung CharmListView
, die Pflege der Mausklick-Ereignis auf seinem eigenen nimmt, aber (bisher) nicht als conveniend ist als Standard ListView
zu verwenden, z.B. Wenn Sie auf die SelectionModel
zugreifen müssen, wie Sie in dieser Frage sehen können: CharmListView SelectedItemProperty?
Hallo, danke für die Antwort, wie kann ich Ihren Code zu meinem Code oben integrieren? ;) –
Sie könnten es in der Methode 'initialize()' des View-Controllers aufrufen: 'new ScrollListener (listView);'. Denken Sie auch daran, dass Sie den eventHandlers/filter entfernen müssen, wenn Sie sich um Ressourcen kümmern müssen. – jns