我想弄清楚如何滚动errno_t strcpy_s(
char *strDestination,
size_t numberOfElements,
const char *strSource
);
,以便嵌套在其内容中的任何ScrollPane
都可见。目标Node
可能有许多我无法预测的嵌套级别。
这与我能够得到的一样接近。它可以工作,但它是一个非常黑客,并有一个错误,在某些条件下产生无限的递归调用循环。必须有更好的方法。
Node
答案 0 :(得分:2)
只需将坐标从Node
的坐标系转换为内容的坐标系。根据内容大小,视口大小和变换后的坐标,您可以确定滚动位置:
public static void scrollTo(ScrollPane scrollPane, Node node) {
final Node content = scrollPane.getContent();
Bounds localBounds = node.getBoundsInLocal();
Point2D position = new Point2D(localBounds.getMinX(), localBounds.getMinY());
// transform to content coordinates
while (node != content) {
position = node.localToParent(position);
node = node.getParent();
}
final Bounds viewportBounds = scrollPane.getViewportBounds();
final Bounds contentBounds = content.getBoundsInLocal();
scrollPane.setHvalue(position.getX() / (contentBounds.getWidth() - viewportBounds.getWidth()));
scrollPane.setVvalue(position.getY() / (contentBounds.getHeight() - viewportBounds.getHeight()));
}