我在一个ScrollPane中有一个Label。我在循环中更新标签(在另一个线程中)。如果用户没有保持在固定位置,那么如何更新ScrollPane以向下滚动(不是左右滚动,这将手动完成)?是否有对应的setter方法?
我在一个ScrollPane中有一个Label。我在循环中更新标签(在另一个线程中)。如果用户没有保持在固定位置,那么如何更新ScrollPane以向下滚动(不是左右滚动,这将手动完成)?是否有对应的setter方法?
要自动将ScrollPane滚动到底部,请设置ScrollPane元素的vvalue
,如下所示:
@FXML private ScrollPane scroll; //this must match the fx:id of the ScrollPane element
scroll.setVvalue(1.0); //1.0 means 100% at the bottom
FXML
文件是您构建场景的地方,然后在 Controller.java
中,通过将变量与元素的 fx:id
关联来操作这些元素。如果它只在选项卡中工作,那么这意味着您必须在其他地方放置 .setVvalue()
,具体取决于您想何时触发它,可能要与写入标签的位置一起在线程中执行。 - MathSceneBuilder
。它可以独立于你的IDE工作,并自动化构建FXML文件的过程。在我看来,至少值得一看。 - MathscrollPane.vvalueProperty().bind(mainGrid.heightProperty());
hBox.heightProperty().addListener(new ChangeListener() {
@Override
public void changed(ObservableValue observable, Object oldvalue, Object newValue) {
scrollPane.setHvalue((Double)newValue );
}
});
1.0
时,也就是hvalue
属性的默认最大值时,这才能偶然起作用,而hvalue
属性应该是vvalue
。因此,仅需要一个无效化监听器。请参见我的答案以获取更正确的解决方案。 - spongebob@Math 谢谢,解决了问题!
@FXML private ScrollPane scroll; //this must match the fx:id of the ScrollPane element or be the scrollpane object
scroll.setVvalue(1.0); //1.0 means 100% at the bottom
我用以下代码解决了“必须查看选项卡”的问题
tab.setOnSelectionChanged(new EventHandler<Event>() {
@Override
public void handle(Event arg0) {
ScrollPane.setVvalue(1.0);
}
});
// adding a new row
vbox_event.addEventRow((Integer) null, null);
// scroll to bottom
Platform.runLater(new Runnable() {
@Override
public void run() {
scrollpane.setVvalue(1.0);
}
});