JavaFX 8-停止TableView跳转到setAll()调用?

时间:2015-09-10 22:32:08

标签: java javafx javafx-8

当我使用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);
    }

}

0 个答案:

没有答案