everyone. I got the following task: I need to implement swipe for listview. I've tried to use example from this question (this answer). But it doesn't work for me. I try to use ScrollEvent
for this purposes. Here my code:
public class SwipeEventHandler implements EventHandler<MouseEvent> {
private final ListView<Long> list;
private double x;
private double y;
public SwipeEventHandler(final ListView<Long> list) {
this.list = list;
this.x = 0;
this.y = 0;
}
@Override
public void handle(final MouseEvent e) {
final EventType<? extends MouseEvent> type = e.getEventType();
if (type == MouseEvent.MOUSE_PRESSED) {
set(e);
} else if (type == MouseEvent.MOUSE_DRAGGED) {
final double deltaX = getX() - getX(e);
final double deltaY = getY() - getY(e);
set(e);
final EventTarget source = e.getTarget(); // cell
final EventTarget target = (EventTarget) e.getSource(); // listview
final ScrollEvent event = new ScrollEvent(
source,
target,
ScrollEvent.SCROLL,
0,
0,
0,
0,
e.isShiftDown(),
e.isControlDown(),
e.isAltDown(),
e.isMetaDown(),
false,
false,
deltaX,
deltaY,
0,
0,
ScrollEvent.HorizontalTextScrollUnits.NONE,
deltaX,
ScrollEvent.VerticalTextScrollUnits.NONE,
deltaY,
1,
null);
Event.fireEvent(target, event);
} else {
setX(0);
setY(0);
}
}
private double getY(final MouseEvent e) {
return e.getSceneY();
}
private double getX(final MouseEvent e) {
return e.getSceneX();
}
private void set(final MouseEvent e) {
System.out.printf("%s-%s %s-%s %s\r\n", getX(), e.getSceneX(),
getY(), e.getSceneY(), e.getEventType().getName());
setX(e.getSceneX());
setY(e.getSceneY());
}
// getters and setters
But nothing happens when I 'Drag' over listview. Could anyone explain me what i'm doing wrong?
UPDATE
When I said "nothing happens" I mean that my code called, but no list scroll performed. I've tried to change source, target, coordinates to another values, bit I didn't found right combination of this params.