【问题标题】:JavaFX column/cell-value not updatingJavaFX 列/单元格值未更新
【发布时间】:2017-02-14 22:40:33
【问题描述】:

我最近开始使用 JavaFX (jdk 1.8.0_66) 编写应用程序。我有几个表(视图),其中一个应该是关于所有“订阅”对象的概述。因此,我创建了 tableview 并用一个可观察的列表填充它:

TableView subsTable = new TableView(SubscriptionAdmin.getObservableSubList());

例如,我的表格看起来像这样:

Subscription | Participants  
Netflix      | 4  
Whatever     | 8
TableColumn<Subscription,String> nameCol = new TableColumn("Subscription");
nameCol.setCellValueFactory(new PropertyValueFactory("name"));
TableColumn<Subscription, Integer> partCol = new TableColumn("Participants");
partCol.setCellValueFactory(
                cellData -> new ReadOnlyObjectWrapper<>(cellData.getValue().getParticipants().size())
);

现在,每当我将参与者添加到我的列表中时,相应单元格中的数字应该增加一,但它不会 - 除非我重新启动应用程序。希望你们中的某个人可以帮助我/解释我有什么问题。

【问题讨论】:

    标签: java user-interface javafx


    【解决方案1】:

    问题是表格(或者更确切地说是单元格)无法知道数据已更改。 如果getParticipants 返回ObservableList,最好的解决方案是创建与其大小的绑定 -

    partCol.setCellValueFactory(
                cellData -> Bindings.size(cellData.getValue().getParticipants())
    );
    

    如果不是ObservableList,您可以考虑将其更改为一个(毕竟 - 您希望在显示更改时更新)。否则,每当您更改列表的大小时,您都必须手动更新表格。

    编辑:您可能需要将.asObject() 添加到绑定调用中,或者将列的类型更改为Number 而不是Integer。请参阅this question 进行讨论。

    【讨论】:

    • 嘿,太酷了!谢谢你这么快的回复!当您已经增加了答案时,我正要报告转换失败!谢谢。
    猜你喜欢
    • 2019-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-24
    • 1970-01-01
    • 2012-09-24
    • 2012-09-24
    • 1970-01-01
    相关资源
    最近更新 更多