我最近开始使用JavaFX(jdk 1.8.0_66)编写应用程序。我有一些表(视图)s,其中一个应该是关于所有'订阅'对象的概述。因此,我创建了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())
);
现在每当我将参与者添加到我的列表中时,相应单元格中的数字应该增加1但不会 - 除了我重新启动应用程序。希望有人能帮助我/解释我的问题。
答案 0 :(得分:1)
问题是表(或者更确切地说 - 单元格)无法知道数据已更改。
如果getParticipants
返回ObservableList
,则最佳解决方案是创建与其'尺寸的绑定 -
partCol.setCellValueFactory(
cellData -> Bindings.size(cellData.getValue().getParticipants())
);
如果它不是ObservableList
,您可以考虑将其更改为一个(毕竟 - 您希望在更改时更新显示)。否则,只要更改列表大小,就必须手动更新表。
修改:您可能需要在绑定调用中添加.asObject()
,或者将列的类型更改为Number
而不是Integer
。有关讨论,请参阅this question。