【问题标题】:JavaFX How to scroll ScrollPane to have node in the middle of view port?JavaFX如何滚动ScrollPane以在视口中间有节点?
【发布时间】:2013-09-03 09:21:30
【问题描述】:

我必须创建带有显示当前时间的线的时间线。我正在使用 AnchorPane,并在 ScrollPane 中添加了行。我需要模拟 1 天,滚动窗格宽度为(2880px,每 60px 为一小时)。我的限制是(前一天 12 小时,第二天 12 小时)。移动我的线路工作正常。

我需要做的就是在视口中间设置线并在其下移动内容。 对于移动线,我使用这种方法:

scrollPane.setHvalue( line.getStartX() - anchorPane.width); 

它工作“有点好”。内容在移动,但线路在移动。我从 0:00 开始(位置设置为 0.25),当位置为(0.75)24 小时时结束。 我也在缩放我的时间轴 Y 所以

/* where line position is calculate by scale, scale is x2, x3, x4.... */
scrollPane.setHvalue( line.getStartX() - anchorPane.width * scale); 

请查看以下时间的图片:0:00、12:00、24:00... 正确的线位置只在12:00...如何修改函数来设置线的位置?

【问题讨论】:

  • 简而言之,绿线代表当前时间,您希望它始终保持在滚动窗格中间的相同位置,而时间线图​​从右向左流动。对吗?
  • 是的,正是...我只是想让这个面板在绿线下移动。 (顶轴与它绑定)
  • 基本观察是(hValue-hMin)/(hMax-hMin) = x / (contentWidth - viewportWidth),其中x是视口左边缘到左边缘的水平偏移量的内容。然后你有 centerX = x + viewportWidth/2 => 来自 JamesD 对How may I zoom a Node centered in a ScrollPane? 的回答。

标签: javafx scrollpane


【解决方案1】:

是否有原因该行必须在滚动窗格内。为什么不将它覆盖在整个滚动窗格上?

或查看这篇关于使用绑定修复滚动窗格内节点的文章:Always visible when scrolled anchored Node in Java FX 2.0?

【讨论】:

    【解决方案2】:

    我不知道我是否完全理解你的问题。在我看来,您有一个滚动窗格,上面有一个绿线节点,不是吗?如果是这样……

    如果绿线是一个节点,也许你可以为滚动窗格的显示值注册一个事件处理程序(hvalue,我相信)。例如,每次修改滚动窗格的滚动值时,都应该更新绿线节点的平移位置。我不是布局专家。 JavaFX 对我来说还是个新手。但据我所知,似乎可以做到。理论上,这显然是可以做到的。

    【讨论】:

      【解决方案3】:

      这个公式让我可以在滚动窗格中将我的对象居中:

      scrollPane.setHvalue(line.getX() - scrollPane.getWidth() / 2) / (anchorPane.getWidth() - scrollPane.getWidth()));
      

      【讨论】:

        猜你喜欢
        • 2016-11-30
        • 2012-10-02
        • 2014-11-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-04
        相关资源
        最近更新 更多