0

为什么一个

tableColumn.setCellValueFactory(new PropertyValueFactory<Object1, Integer>("Number")); 

当我只向 tableView 添加一行时,方法多次调用 getNumber 方法?

number 字段在 object2 中,在 object1 中使用。所以这里 Object1 one 提供了一个 getNumber 方法,该方法获取存储在 object2 中的 arraylist 中的数字。

这是我的 getNumber 方法:

public double getNumber() {
    setNumber++;
    return sets.get(setNumber).getNumber();
}
4

1 回答 1

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
于 2013-03-28T09:32:49.433 回答