0

在 Android 上使用 JavaFX(JDK7 的最新版本)。

这里有没有人有在触摸屏上滚动 GridPane 的经验?我可以使用以下代码进行全功能缩放:

    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();
        }
    });

我试图对我认为的每一个可能的事件进行平移,包括来自 JavaFX 文档 ( 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();
        }
    });

不幸的是,当我运行应用程序并尝试用手指平移时,没有任何反应。这是一个错误,是我的代码中有问题还是我应该为此使用完全不同的技术?

非常感谢你。

4

1 回答 1

0

我实现了 MOUSE_PRESSED 和 MOUSE_DRAGGED 事件过滤器:

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();
    }
});

尽管如此,问题仍然存在,但当我有工作解决方案时,现在更多的是出于好奇。它也可能比当前的解决方案更优雅。到目前为止,我接受我的答案,直到有人提出更好的答案。

于 2014-08-26T07:10:50.787 回答