0

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.

blizzard
  • 99
  • 8

1 Answers1

0

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.

blizzard
  • 99
  • 8