I use JavaFX on Android (latest version for JDK7).
Does anyone here has experience with scrolling GridPane on touchscreen? I can zoom fully functional with code following:
gridPane.setOnZoom(new EventHandler<ZoomEvent>() {
@Override
public void handle(ZoomEvent event) {
gridPane.setScaleX(gridPane.getScaleX() * event.getZoomFactor());
gridPane.setScaleY(gridPane.getScaleY() * event.getZoomFactor());
event.consume();
}
});
I tried to get panning with every possible event I think including the one from JavaFX documentation (http://docs.oracle.com/javafx/2/events/touch_events.htm):
gridPane.setOnScroll(new EventHandler<ScrollEvent>() {
@Override
public void handle(ScrollEvent event) {
if (!event.isInertia()) {
gridPane.setTranslateX(gridPane.getTranslateX() + event.getDeltaX());
gridPane.setTranslateY(gridPane.getTranslateY() + event.getDeltaY());
}
event.consume();
}
});
Unfortunately when I run the app and try to pan with my finger nothing happens. Is this a bug, is something in my code wrong or should I use completely different technique for this?
Thank you very much.
I made it with implementing MOUSE_PRESSED and MOUSE_DRAGGED event filter:
private class DeltaDistance {
double x;
double y;
}
private final DeltaDistance gridPaneDeltaTranslate = new DeltaDistance();
gridPane.addEventFilter(MouseEvent.MOUSE_PRESSED, new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
paneDragX = gridPane.getLayoutX() - event.getSceneX();
paneDragY = gridPane.getLayoutY() - event.getSceneY();
System.out.println("MousePressed" + "\t" + event.getX() + " " + event.getY());
event.consume();
}
});
gridPane.addEventFilter(MouseEvent.MOUSE_DRAGGED, new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
gridPane.setLayoutX(event.getSceneX() + paneDragX);
gridPane.setLayoutY(event.getSceneY() + paneDragY);
System.out.println("MouseDragged" + "\t" + event.getX() + " " + event.getY());
event.consume();
}
});
Nevertheless the question still remains but now more for curiosity when I have working solution. Also it could be more elegant than current solution. So far, I accept my answer until someone comes with better one.