当我使用JavaFX中的TableView<T>
时,我经常将其称为setAll()
,以便为其提供新的List<T>
。但是,如果行数有些大,滚动条会因删除和添加项目而发疯。
如何阻止此行为?有没有办法可以&#34;关闭&#34;填充新List<T>
时的视觉更新?如果它的行为如此,它可能会让用户感到沮丧和烦恼。
TableView<MyType> tableView = ...;
tableView.getItems().setAll(someList); //goes crazy for a second
更新 我被要求提供一个SSCCE,我想出了这个。它并不像我的生产应用那样严重地反映问题。但是,如果您将滚动条移动到中心,然后单击&#34; REBUILD&#34;按钮它确实跳了起来。有没有办法可以在刷新期间保持滚动条固定?我想如果我能做到这一点,它将解决我的大问题。
public final class TableViewJumpTest extends Application {
private Random rand = new Random();
private final Supplier<List<Integer>> listSupplier = () -> IntStream.range(0,rand.nextInt(100000))
.mapToObj(i -> rand.nextInt(10000)).collect(Collectors.toList());
@Override
public void start(Stage stage) throws Exception {
TableView<Integer> tableView = new TableView<>();
TableColumn<Integer,Number> col = new TableColumn<>("VALUE");
col.setCellValueFactory(cb -> new ReadOnlyIntegerWrapper(cb.getValue()));
tableView.getColumns().add(col);
tableView.getItems().setAll(listSupplier.get());
VBox vBox = new VBox();
vBox.getChildren().add(tableView);
Button bttn = new Button("REBUILD");
bttn.setOnAction(e -> tableView.getItems().setAll(listSupplier.get()));
vBox.getChildren().add(bttn);
stage.setScene(new Scene(vBox));
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}