【问题标题】:Display data from observable list in tableview javafx在tableview javafx中显示来自可观察列表的数据
【发布时间】:2019-05-28 05:01:51
【问题描述】:

我有这个代码

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 的最后一个值,而不是所需的所有数据。

但是当我在控制台打印 observable 列表时,所有需要的数据都被正确打印了。

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

【问题讨论】:

    标签: java javafx tableview


    【解决方案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一次

    【讨论】:

    • 我尝试使用您的方法,但输出仍然相同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-12
    • 1970-01-01
    • 1970-01-01
    • 2016-09-28
    • 2017-08-23
    相关资源
    最近更新 更多