使用setCellValueFactory时,Javafx多次调用get方法

时间:2013-03-26 06:18:14

标签: javafx tableview tablecolumn

为什么要

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();
}

1 个答案:

答案 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