【问题标题】:JavaFX on Android - GridPane pan/scroll standard way not workingAndroid 上的 JavaFX - GridPane 平移/滚动标准方式不起作用
【发布时间】:2014-08-25 11:36:38
【问题描述】:

我使用JavaFX on Android(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();
        }
    });

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

非常感谢。

【问题讨论】:

    标签: android scroll javafx-2 gridpane


    【解决方案1】:

    我实现了 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();
        }
    });
    

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

    【讨论】:

      猜你喜欢
      • 2017-01-20
      • 1970-01-01
      • 2016-05-28
      • 2013-11-11
      • 1970-01-01
      • 2019-06-27
      • 1970-01-01
      • 2017-11-27
      • 2021-03-13
      相关资源
      最近更新 更多