Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以通过编程方式将滚动窗格滚动到给定位置?_Java_Javafx_Scrollpane - Fatal编程技术网

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值。水平滚动条的类似计算。