当前位置: 首页 > 知识库问答 >
问题:

Android上的Java FX-grid pane平移/滚动标准方式不起作用

燕光熙
2023-03-14

我在Android上使用Java FX(JDK 7的最新版本)。

这里有人有在触摸屏上滚动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();
        }
    });

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

非常感谢。

共有1个答案

石正卿
2023-03-14

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

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

 类似资料:
  • 问题内容: 我正在使用计算器。我注意到,在默认的android calc中,您可以水平滚动textview。我查阅了文档,发现了该属性,但是将其添加到textview后,我仍然无法进行水平滚动,文档中没有关于它的更多信息,使我认为仅添加attr就足够了。这是计算器的文本视图: 当字符超过textview宽度时,将修剪字符串,并在末尾显示…。我究竟做错了什么? 问题答案: 这样可以使textview

  • 我有一个ImageView,下面有一个EditText。我希望在查看ImageView时能够写入EditText。EditText此时不可见。有人知道如何实现吗?我用TextWatcher试了一下,但TextChanged后的滚动不起作用。 xml如下所示:

  • 我可以在JavaFX中创建一个仅水平滚动的滚动窗格,如下所示: 但是,鼠标滚轮在这种情况下仍然尝试垂直滚动而不是水平滚动(除非我专门在水平滚动条上滚动。)

  • 我试图用JavaFX创建一个“可拖动”的直方图UI。我有一个滚动窗格,其中包含一个网格窗格,有一列和许多行。每行是一个包含标签的HBox。每10行,还有一个包含一行的HBox。 我试图通过设置onMousePressed、onMouseAdrag和onMouseCreleased事件处理程序(如下所示),使包含行的HBoxe可拖动。如果我将一条hbox线拖动并释放到它的起点之上,它就会工作-它最终

  • 问题内容: 我在Rails应用程序中使用Elasticsearch&Typeahead执行自动完成。我从这里得到了主意 https://shellycloud.com/blog/2013/10/adding-search-and-autocomplete-to-a- rails-app-with-elasticsearch 我已经正确配置了elasticsearch自动完成功能,因为当我直接通过浏

  • 问题内容: 在鼠标滚轮上滚动它执行水平滚动。 已编辑 好吧,firebug说他在用 问题答案: 看来他只是将mousewheel事件映射到滚动区域。在IE中,仅通过使用方法就非常容易-滚动水平条的量为垂直条通常滚动的量。其他浏览器不支持该方法,因此您必须随心所欲地滚动任意数量: