當然它不會顯示所有項目。沒有比屏幕上顯示的更多ListCell
(+也許有幾個距離視口足夠近)。
通常只顯示一個單元格,您可以調用scrollTo
方法。但是,如果你想控制滾動速度,這不是一個選項。
您需要調整滾動位置,你可以得到訪問ScrollBar
雖然並使用Timeline
動畫來改變它的值:
@Override
public void start(Stage primaryStage) {
ListView<Integer> listView = new ListView<>();
for (int i = 0; i < 100; i++) {
listView.getItems().add(i);
}
Button btn = new Button("start/stop scrolling");
Scene scene = new Scene(new VBox(listView, btn));
// make sure skin is created
listView.applyCss();
listView.layout();
// assuming vertical listview here
ScrollBar scrollBar = (ScrollBar) listView.lookup(".scroll-bar:"+listView.getOrientation().toString().toLowerCase());
DoubleProperty pos = new SimpleDoubleProperty();
DoubleBinding scrollValueBinding
= scrollBar.maxProperty().subtract(scrollBar.minProperty()).multiply(pos).add(scrollBar.minProperty());
Timeline timeline = new Timeline(
new KeyFrame(Duration.ZERO, new KeyValue(pos, 0d)),
new KeyFrame(Duration.seconds(5), new KeyValue(pos, 1d))
);
scrollBar.visibleProperty().addListener((observable, wasVisible, isVisible) -> {
if (!isVisible) {
// stop when scrollbar disappears
timeline.pause();
}
});
timeline.statusProperty().addListener((observable, oldStatus, newStatus) -> {
if (newStatus == Animation.Status.RUNNING) {
scrollBar.setDisable(true);
scrollBar.valueProperty().bind(scrollValueBinding);
} else if (oldStatus == Animation.Status.RUNNING) {
scrollBar.setDisable(false);
scrollBar.valueProperty().unbind();
}
});
timeline.setAutoReverse(true);
timeline.setCycleCount(Animation.INDEFINITE);
btn.setOnAction(evt -> {
if (timeline.getStatus() == Animation.Status.RUNNING || !scrollBar.isVisible()) {
timeline.pause();
} else {
// only run if not already running and scrollbar is visible
Duration total = timeline.getCycleDuration();
timeline.playFrom(total.multiply((scrollBar.getValue() - scrollBar.getMin())/(scrollBar.getMax() - scrollBar.getMin())));
}
});
primaryStage.setScene(scene);
primaryStage.show();
}
**我在這行越來越空指針**「DoubleBinding scrollValueBinding = scrollBar.maxProperty()。subtract(scrollBar.minProperty())。multiply(pos).add(scrollBar.minProperty());' – Rhidoy