当 TableView 显示该值时,将获取该值。当您在检索时修改您的值时,您只是在这样做,并且您只需计算获取次数。
想象一下,您有一个 TableView,列表中有 10 个可见行和 20 个条目。当您向下和向上滚动时,将为新出现在可见区域中的行获取值。
如果你试试这个:
public class SO extends Application {
public static class Item {
final int v;
Item(int v) { this.v = v; }
public int getV() {
System.out.println(v);
return v;
}
}
@Override
public void start(Stage primaryStage) throws Exception {
StackPane pane = new StackPane();
Scene scene = new Scene(pane, 300, 100);
primaryStage.setScene(scene);
ObservableList<Item> list = FXCollections.observableArrayList();
for (int i=0; i<20; i++) {
Item item = new Item(i);
list.add(item);
}
TableView<Item> tv = new TableView<>(list);
TableColumn<Item, String> col = new TableColumn<>("Column");
col.setCellValueFactory(new PropertyValueFactory<Item,String>("v"));
tv.getColumns().add(col);
pane.getChildren().add(tv);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
当将 TableView 滚动到最后时,它将在控制台中打印越来越多的数字。向后滚动时,它会打印递减的数字,因为它显示列表开头的值。部分输出:
5
6
7
8
9
9
2
2
1
1
0