为什么要
tableColumn.setCellValueFactory(new PropertyValueFactory<Object1, Integer>("Number"));
当我只向tableView添加一行时,方法多次调用getNumber方法?
number字段位于object1中使用的object2中。所以这里Object1提供了一个getNumber方法,它获取存储在object2中的arraylist中的数字。
这是我的getNumber方法:
public double getNumber() {
setNumber++;
return sets.get(setNumber).getNumber();
}
答案 0 :(得分:0)
当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