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”可以工作,但会将最后一个元素从视图的底部移动到顶部,这也有点令人恼火。也许这会引导您朝着正确的方向前进。