2013-03-26 79 views
0

时为什么一个JavaFX的多次调用get方法使用setCellValueFactory

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

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

数目字段是在被在object1使用对象2。所以这里Object1提供了一个getNumber方法,它获取一个存储在object2中的数组列表中的数字。

这里是我的getNumber方法:

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

回答

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