Java 是否可以通过编程方式将滚动窗格滚动到给定位置?
是否可以通过编程方式滚动到给定位置Java 是否可以通过编程方式将滚动窗格滚动到给定位置?,java,javafx,scrollpane,Java,Javafx,Scrollpane,是否可以通过编程方式滚动到给定位置 ScrollPane#vvalue和ScrollPane#hvalue是无用的,因为它们从0到1不等。是否有任何绝对属性,或者我应该自己对其进行编码?如果您的意思是将滚动窗格移动给定数量的像素,则获取图像大小,并计算您需要使用hvalue或vvalue移动多少 intpixelsh=45; int change=pixelsH/scrollpane.getWidth(); scrollpane.setHvalue(scrollpane.getHValue()+
ScrollPane#vvalue
和ScrollPane#hvalue
是无用的,因为它们从0到1不等。是否有任何绝对属性,或者我应该自己对其进行编码?如果您的意思是将滚动窗格移动给定数量的像素,则获取图像大小,并计算您需要使用hvalue
或vvalue
移动多少
intpixelsh=45;
int change=pixelsH/scrollpane.getWidth();
scrollpane.setHvalue(scrollpane.getHValue()+change);
垂直变化的概念相同。如果您的意思是将滚动窗格移动给定数量的像素,则获取图像大小,并计算使用
hvalue
或vvalue
移动所需的量
intpixelsh=45;
int change=pixelsH/scrollpane.getWidth();
scrollpane.setHvalue(scrollpane.getHValue()+change);
垂直变化的概念相同。这些属性并不是无用的,您只需要知道如何正确使用它们。(没有允许您直接指定绝对值的方法。) 假设
滚动条
可见,您知道以下等式
topLeft / (contentSize - viewportSize) = scrollValue / scrollMax
这可以重新表述为
scrollValue = (topLeft * scrollMax) / (contentSize - viewportSize)
= topLeft / (contentSize - viewportSize)
hvalue = topLeftX / (contentWidth - viewportWidth)
vvalue = topLeftY / (contentHeight - viewportHeight)
其中
topLeftX
和topLeftY
是视口左上角像素的x和y坐标。使用来确定视口的大小。这些属性不是无用的,您只需要知道如何正确使用它们。(没有允许您直接指定绝对值的方法。)
假设滚动条
可见,您知道以下等式
topLeft / (contentSize - viewportSize) = scrollValue / scrollMax
这可以重新表述为
scrollValue = (topLeft * scrollMax) / (contentSize - viewportSize)
= topLeft / (contentSize - viewportSize)
hvalue = topLeftX / (contentWidth - viewportWidth)
vvalue = topLeftY / (contentHeight - viewportHeight)
其中
topLeftX
和topLeftY
是视口左上角像素的x和y坐标。使用来确定视口的大小。使用setHvalue
和setVvalue
来定位滚动窗格
可以根据节点计算值
例如:
double nodeX=dummyNode.getBoundsInParent().getMaxX();
double nodeY=dummyNode.getBoundsInParent().getMaxY();
双滚动窗格宽度=dummyScrollPane.getContent().getBoundsInLocal().getWidth()
double ScrollPaneHight=dummyScrollPane.getContent().getBoundsInLocal().getHeight()
dummyScrollPane.setVvalue(节点/高度);
dummyScrollPane.setHvalue(节点/宽度)
使用setHvalue
和setVvalue
定位滚动窗格
可以根据节点计算值
例如:
double nodeX=dummyNode.getBoundsInParent().getMaxX();
double nodeY=dummyNode.getBoundsInParent().getMaxY();
双滚动窗格宽度=dummyScrollPane.getContent().getBoundsInLocal().getWidth()
double ScrollPaneHight=dummyScrollPane.getContent().getBoundsInLocal().getHeight()
dummyScrollPane.setVvalue(节点/高度);
dummyScrollPane.setHvalue(节点/宽度)代码>我怀疑这是否会产生正确的结果,因为您没有考虑可见区域。此外,似乎您决定在代码中的某个地方更改一些变量名。是的@fabian,我在代码段中遗漏了正确的变量名,谢谢您指出这一点。此外,这还回答了以编程方式滚动到计算位置的问题。当dummynode远离视口时,这不起作用。我怀疑这是否会产生正确的结果,因为您没有考虑可见区域。此外,似乎您决定在代码中的某个地方更改一些变量名。是的@fabian,我在代码段中遗漏了正确的变量名,谢谢您指出这一点。此外,这还回答了以编程方式滚动到计算位置的问题。当dummynode远离视口时,这不起作用。您还可以(我相信)将滚动窗格的hmax
设置(或绑定)到contentWidth viewportWidth
(对于vmax
)上如果您希望值以像素坐标为单位。这很难理解。。是否有人可以生成一个静态函数来获取滚动窗格和实际滚动到其中的节点?对于垂直滚动条:scrolledPixelsY=(contentHeight-ViewPortHeight)*V值。水平滚动条的计算方法类似。如果希望滚动窗格的hmax
值以像素坐标表示,您还可以(我相信)将其设置(或绑定)为contentWidth viewportWidth
(对于vmax
),这很难理解。。是否有人可以生成一个静态函数来获取滚动窗格和实际滚动到其中的节点?对于垂直滚动条:scrolledPixelsY=(contentHeight-ViewPortHeight)*V值。水平滚动条的类似计算。