JavaFX ScrollPane setVvalue()无法正常工作

时间:2017-01-08 15:36:59

标签: java javafx scrollpane

在我的应用程序中,我有一个带有VBox的ScrollPane,它可能包含0到1000个窗格,每个窗格的设置高度为90。每个窗格都有相关项,可以从内部按钮加载,清除VBox并添加其子项以及“返回结果”按钮,该按钮加载上一个列表并应返回到ScrollPane中的相同位置。但是,setVvalue()似乎不起作用。窗格和他们的孩子属于同一类。

Whoops, looks like something went wrong.

setVvalue()工作并在将其打印出来时将ScrollPane更改回旧值,但ScrollPane本身不会去任何地方并保持在顶部。是否与删除和添加节点到VBox有关?为什么ScrollPane在设置Vvalue时不会移动?

2 个答案:

答案 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 

希望它有所帮助。