在我的应用程序中,我有一个带有VBox的ScrollPane,它可能包含0到1000个窗格,每个窗格的设置高度为90。每个窗格都有相关项,可以从内部按钮加载,清除VBox并添加其子项以及“返回结果”按钮,该按钮加载上一个列表并应返回到ScrollPane中的相同位置。但是,setVvalue()似乎不起作用。窗格和他们的孩子属于同一类。
Whoops, looks like something went wrong.
setVvalue()工作并在将其打印出来时将ScrollPane更改回旧值,但ScrollPane本身不会去任何地方并保持在顶部。是否与删除和添加节点到VBox有关?为什么ScrollPane在设置Vvalue时不会移动?
答案 0 :(得分:2)
当您致电scroll.setVvalue(vValue)
时,滚动窗格已经执行了布局,因为其内容已更改,因此无法重新测量"其内容的大小。所以滚动条"拇指"通过在前一个布局的上下文中解释vvalue
来重新定位。您可以使用
public void returnToResults() {
Platform.runLater(() -> {
vbox.getChildren.clear();
vbox.getChildren.addAll(results);
scroll.layout();
scroll.setVvalue(vValue);
returnToResults.setDisable(true);
});
}
旁白:这些方法是从后台线程调用的吗?为什么他们的内容包含在Platform.runLater(...)
?
答案 1 :(得分:0)
在我的情况下,调用CameraPosition
方法并不起作用。
我还必须给我当前的场景打电话layout()
。
相关的FXML:
applyCss()
如果我向
添加新标签,我希望滚动窗口自动向下滚动<ScrollPane fx:id="messageScrollPane" fitToWidth="true" fitToHeight="true">
VBox fx:id="messageBox"/>
</ScrollPane>
所以我的实现方法如下:
messageBox
希望它有所帮助。