是否有向下自动滚屏的任何一个ScrollPane控制时,它的内容的高度的增加? 例如,我在屏幕底部的TitledPane(一个ScrollPane内),当我展开我想将ScrollPane向下滚动,所以我可以看到TitledPane的全部内容。
Answer 1:
您可以实现这种行为随着组合titledPane.localToScene()
和scrollPane.setVvalue()
首先是获得titledPane的坐标,而第二个是设置滚动窗格的垂直栏的位置。 请注意,它的范围是0 - 1之间。
Answer 2:
你可以bind
的ScrollPane
vvalue
与物业heightProperty
内的容器。 例如,如果你有一个VBox
在ScrollPane
:
scrollPane.vvalueProperty().bind(vBox.heightProperty());
Answer 3:
你必须告诉滚动窗格哪里是当前坐标值之前传递到垂直或水平吧。
此代码工作非常正常,我:
// the owner's node of your scrollPane;
titledPane.layout();
// the maxValue for scrollPane bar ( 1.0 it's the default value )
scrollPane.setVvalue( 1.0d );
你有你的地方滚动面板增长实现代码。 例如,如果您将节点添加到滚动窗格内节点,将它们添加一个监听到它的儿童名单。
如果滚动窗格的内部节点改变它的高度,一个监听器添加到heightProperty。
例如,您的滚动窗格内节点这是一个AnchorPane和添加节点此窗格,所以这样做:
anchorPane.getChildren().addListener(
( ListChangeListener.Change<? extends Node> c ) -> {
titledPane.layout();
scrollPane.setVvalue( 1.0d );
}
);
如果这是它生长的高度...
heightProperty().addListener(
(observable, oldValue, newValue) -> {
titledPane.layout();
scrollPane.setVvalue( 1.0d );
}
);
而已!
Answer 4:
您可以添加一个侦听这样的TitledPane的高度属性:
titledPane.heightProperty().addListener((observable, oldValue, newValue) ->
vvalueProperty().set(newValue.doubleValue()));
Answer 5:
唐诺如果它仍然是相关的,我也有过类似的问题上下的这个解决方案为我工作。 我需要滚动条自动滚动在MVVM模式。 我所做的是绑定的textarea的scrollTopProperty与在视图模型一个SimpleDoubleProperty观。 唯一的问题是,scrollTopProperty,基本上滚动基于像素,所以我增加了它的基础上车道* 100的数量;
视图
textArea.textProperty().bindBidirectional(viewModel.SimpleStringProperty());
textArea.scrollTopProperty().bindBidirectional(viewModel.SimpleDoubleProperty());
视图模型
SimpleDoubleProperty.setValue(SimpleStringProperty.getValue().split("\n").length * 100);
我知道这些代码是不是真的代表,但如果有人需要实现的更多细节,我可以详细...
Answer 6:
我通过使用AnimationTimer做到了。 我不得不等待亿纳秒,以确保将ScrollPane已反应到扩大Titlepane。
public void scrollNodeInTopScrollPane(Node n, ScrollPane s) {
final Node node = n;
final ScrollPane clientTopScrollPane = s;
AnimationTimer timer = new AnimationTimer() {
long lng = 0;
@Override
public void handle(long l) {
if (lng == 0) {
lng = l;
}
if (l > lng + 100000000) {
if (node.getLocalToSceneTransform().getTy() > 20) {
clientTopScrollPane.setVvalue(clientTopScrollPane.getVvalue() + 0.05);
if (clientTopScrollPane.getVvalue() == 1) {
this.stop();
}
} else {
this.stop();
}
}
}
};
timer.start();
}
文章来源: JavaFX auto-scroll down scrollpane