【发布时间】:2022-01-17 20:02:50
【问题描述】:
在我的表格中,我有一个单元格在不与表格交互的情况下不会更新。
我已经在这里找到原因Java: setCellValuefactory; Lambda vs. PropertyValueFactory; advantages/disadvantages
我的问题是,单元格项目的默认值为LocalDate.MIN,只要项目具有此默认值,我希望我的单元格包含“---”。当我更新项目时,我希望单元格包含当前日期字符串。
物品类别:
public class ItemEv {
private final ObjectProperty<LocalDate> openedAt;
@XmlJavaTypeAdapter(LocalDateAdapter.class)
public final LocalDate getOpenedAt() {
return openedAt.get();
}
public final ObjectProperty<LocalDate> openedAtProperty() {
return this.openedAt;
}
public final void setOpenedAt(LocalDate openedAt) {
this.openedAt.set(openedAt);
}
}
我在另一个 CellFactory 中设置了新值: i.setOpenedAt(LocalDate.now());
这是可行的,但不需要:
openedAtColumnEv.setCellValueFactory(cellData -> cellData.getValue().openedAtProperty().asString());
这是我迄今为止所尝试的:
openedAtColumnEv.setCellValueFactory(new Callback<CellDataFeatures<ItemEv, String>, ObservableValue<String>>() {
@Override
public ObservableValue<String> call(CellDataFeatures<ItemEv, String> i) {
if (i.getValue().getOpenedAt().equals(LocalDate.MIN)) {
return new SimpleStringProperty("---");
}
return i.getValue().openedAtProperty().asString();
}
});
还有这个:
openedAtColumnEv.setCellValueFactory(cellData -> {
if(cellData.getValue().openedAtProperty().getValue().equals(LocalDate.MIN)) {
return new SimpleStringProperty("---");
}
return cellData.getValue().openedAtProperty().asString();
});
我的两个测试都返回 SimpleStringProperty 或 StringBinding 应该没问题。
在我的测试中,我犯了一个错误,即 IF 语句中的第一个 return 永远不会返回 true,然后单元格值显示 LocalDate.MIN 的标准字符串,并在 item 属性更改时立即更新。
我对此有点迷茫。请原谅我的英语不好,我不是母语人士。
【问题讨论】: