Java 添加更多项目时不滚动TableView

Java 添加更多项目时不滚动TableView,java,javafx,tableview,Java,Javafx,Tableview,我想动态地将项目添加到表中。 我是这样做的: public class TestApp extends Application { public static void main(final String[] args) { launch(args); } private final AtomicLong counter = new AtomicLong(); @Override public void start(final Stage p

我想动态地将项目添加到表中。 我是这样做的:

public class TestApp extends Application {

    public static void main(final String[] args) {
    launch(args);
    }

    private final AtomicLong counter = new AtomicLong();

    @Override
    public void start(final Stage primaryStage) {

    final VBox root = new VBox(5);
    root.setPadding(new Insets(10));
    root.setAlignment(Pos.CENTER);

    final TableView<String> tableView = new TableView<>();
    final TableColumn<String, String> column = new TableColumn<>("Text");
    column.setCellValueFactory(f -> new SimpleStringProperty(f.getValue()));

    tableView.getColumns().add(column);

    // Add some sample items to our TableView
    for (int i = 0; i < 100; i++) {
        tableView.getItems().add("Item #" + counter.incrementAndGet());
    }

    final Button button = new Button("Add items");
    final long oldElement = counter.get();
    button.setOnAction(e -> {
        // Add more elements
        for (int i = 0; i < 10; i++) {
        tableView.getItems().add("Item #" + counter.incrementAndGet());
        }
        tableView.scrollTo("Item #" + oldElement);
    });

    root.getChildren().add(button);
    root.getChildren().add(tableView);

    // Show the Stage
    primaryStage.setWidth(300);
    primaryStage.setHeight(300);
    primaryStage.setScene(new Scene(root));
    primaryStage.show();
    }
}
公共类TestApp扩展应用程序{
公共静态void main(最终字符串[]args){
发射(args);
}
私有最终AtomicLong计数器=新的AtomicLong();
@凌驾
公共作废开始(最终阶段初级阶段){
最终VBox根=新VBox(5);
根。设置填充(新插图(10));
根部设置对齐(位置中心);
final TableView TableView=新TableView();
最终表列=新表列(“文本”);
column.setCellValueFactory(f->newSimpleStringProperty(f.getValue());
tableView.getColumns().add(column);
//将一些示例项添加到我们的TableView中
对于(int i=0;i<100;i++){
tableView.getItems().add(“Item#”+counter.incrementAndGet());
}
最终按钮=新按钮(“添加项目”);
final long oldElement=counter.get();
按钮。设置操作(e->{
//添加更多元素
对于(int i=0;i<10;i++){
tableView.getItems().add(“Item#”+counter.incrementAndGet());
}
tableView.scrollTo(“项#”+旧元素);
});
root.getChildren().add(按钮);
root.getChildren().add(tableView);
//上台
初级阶段。设置宽度(300);
初生阶段:坐位高度(300);
primaryStage.setScene(新场景(根));
primaryStage.show();
}
}
(示例取自)

现在我想更改的是,当表格已经完全向下滚动,并且我添加了更多项目时,表格会自动向下滚动。

“滚动状态”似乎保持不变,这就是为什么我仍然看到表的最底部(以及新元素)

如何将项目添加到表中,但将滚动条保持在当前位置/当前行

“scrollTo”可以工作,但会将最后一个元素从视图的底部移动到顶部,这也有点令人恼火。

也许这会引导您朝着正确的方向前进。