This is what I did
public class CustomListCell extends ListCell<Document>{
private double lastYposition = 0;
public CustomListCell(){
setOnMousePressed(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
lastYposition = event.getSceneY();
}
});
setOnMouseDragged(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
double newYposition = event.getSceneY();
double diff = newYposition - lastYposition;
lastYposition = newYposition;
CustomScrollEvent cse = new CustomScrollEvent();
cse.fireVerticalScroll((int)diff, DocumentArrayAdapter.this, (EventTarget) event.getSource());
}
});
and
package myproject.utils;
import javafx.event.Event;
import javafx.event.EventTarget;
import javafx.scene.input.ScrollEvent;
public class CustomScrollEvent {
public void fireVerticalScroll(int deltaY, Object source, EventTarget target){
ScrollEvent newScrollEvent = null;
newScrollEvent = new ScrollEvent(source,
target,
ScrollEvent.SCROLL,
0,
0,
0,
0,
false,
false,
false,
false,
false,
false,
0,
deltaY,
0,
0,
ScrollEvent.HorizontalTextScrollUnits.CHARACTERS,
0,
ScrollEvent.VerticalTextScrollUnits.NONE,
deltaY,
0,
null);
Event.fireEvent(target, newScrollEvent);
}
}
Although I implemented a listener in my own ListCell, I think it will also work with the implementation of listeners directly in ListView, with listView.setOnMousePressed and listView.setOnMouseDragged
source
share