0

なぜ

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

tableView に行を 1 つだけ追加すると、メソッドは getNumber メソッドを複数回呼び出しますか?

数値フィールドは、object1 で使用される object2 にあります。ここで Object1 は、object2 の arraylist に格納されている数値を取得する getNumber メソッドを提供します。

ここに私の getNumber メソッドがあります:

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

1 に答える 1

0

値は、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
于 2013-03-28T09:32:49.433 に答える