値は、TableView が表示するときに取得されます。取得時に値を変更すると、それを行っているだけで、フェッチをカウントするだけです。
10 行が表示され、リストに 20 個のエントリがある TableView があるとします。上下にスクロールすると、表示領域に新しく表示される行の値が取得されます。
これを試してみると:
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