是否可以通过编程方式将ScrollPane滚动到给定位置?

时间:2016-10-19 18:06:26

标签: java javafx scrollpane

是否可以通过编程方式将ScrollPane滚动到给定位置?

ScrollPane#vvalueScrollPane#hvalue没用,因为它们从0到1不等。是否有绝对属性或我应该自己编写代码?

3 个答案:

答案 0 :(得分:3)

这些属性并非无用,您只需要知道如何正确使用它们。 (没有方法允许您直接指定绝对值。)

假设ScrollBar可见,您知道以下等式

topLeft / (contentSize - viewportSize) = scrollValue / scrollMax

这可以重新表述为

scrollValue = (topLeft * scrollMax) / (contentSize - viewportSize)
            = topLeft / (contentSize - viewportSize)

hvalue = topLeftX / (contentWidth - viewportWidth)
vvalue = topLeftY / (contentHeight - viewportHeight)

其中topLeftXtopLeftY是视口左上角像素的x和y坐标。使用viewportBounds确定视口的大小。

答案 1 :(得分:1)

如果您的意思是移动滚动窗格一定数量的像素,那么请获取图片大小并计算您需要使用hvaluevvalue移动多少。

int pixelsH = 45; int change = pixelsH/scrollpane.getWidth(); scrollpane.setHvalue(scrollpane.getHValue() + change);

垂直变化的概念相同。

答案 2 :(得分:0)

使用setHvaluesetVvalue定位您的scrollPane。

可以根据Nodes

计算值

例如:

double nodeX = dummyNode.getBoundsInParent().getMaxX(); double nodeY = dummyNode.getBoundsInParent().getMaxY(); double scrollPaneWidth = dummyScrollPane.getContent().getBoundsInLocal().getWidth() double scrollPaneHeight = dummyScrollPane.getContent().getBoundsInLocal().getHeight() dummyScrollPane.setVvalue(nodeY/height); dummyScrollPane.setHvalue(nodeX/width);