在TableView JavaFX中显示可观察列表中的数据

时间:2019-05-28 05:01:52

标签: java javafx tableview

我有这个代码

ObservableList data = FXCollections.observableArrayList();
data.addAll(itemNumber, "Not Verified", "");

mItemNoColumn.setCellValueFactory (value -> SimpleObjectProperty<>(data.get(0)));
mStatusColumn.setCellValueFactory (value -> SimpleObjectProperty<>(data.get(1)));

mTableView.getItems().add(data);

假定所有变量都已声明并初始化。

该代码在tableview中给出的输出是,它仅获取ObservableList的最后一个值,而不是所需的所有数据。

但是,当我在控制台中打印可观察列表时,所有需要的数据都会正确打印。

tableview中的预期输出应为可观察列表中的所有项

1 个答案:

答案 0 :(得分:1)

单元格值工厂用于TableColumn中的每个单元格。这意味着当您在工厂中显式使用data(仅表的一行)时,您无意间将每个单元格(即每一行)都绑定到了那个data对象。传递给工厂的CellDataFeatures对象使您可以访问试图获取其值的行的项目。您的代码应类似于:

mItemNoColumn.setCellValueFactory(features -> Bindings.valueAt(features.getValue(), 0));
mStatusColumn.setCellValueFactory(features -> Bindings.valueAt(features.getValue(), 1));

我使用了Bindings.valueAt(ObservableList,int),因为如果您更改ObservableList的索引处的值,它将更新。但是,如果不需要,可以继续将值包装在ObjectProperty中。

您没有提供太多上下文,所以我不确定该代码在哪里调用,但是请记住,您只需设置一次cellValueFactory