我有这个代码
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中的预期输出应为可观察列表中的所有项
答案 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
。