我的cellFactory出了问题。 我希望如果在FX TableView中将Date设置为我的对象,则updateItem方法会检查它是否是有效日期。如果不是,细胞应该涂成红色。
_availableCol.setCellFactory(column -> {
return new TableCell<SimpleReservationUnit, LocalDate>() {
@Override
protected void updateItem(LocalDate date, boolean empty) {
super.updateItem(date, empty);
if (empty || date == null) {
setText(null);
}else {
if (date.compareTo(_newDeparture.getValue()) < 0) {
setStyle("-fx-background-color: red");
}else{
setStyle("");
}
}
}
};
});
着色有效,但LocalDate永远不会设置为单元格。据我所知,这应该发生在super()调用中。 为此列实现了CellValueFactory:
_availableCol.setCellValueFactory(new PropertyValueFactory<>("Available"));
任何想法我做错了什么?
答案 0 :(得分:1)
您需要设置节点的文本。当您检测到它是空的时,您会清除它,但是当它没有时,您不会设置它。如果单元格为空,您也忘记清除样式。
if (empty || date == null) {
setText(null);
setStyle(""); // can this be null?
} else {
LocalDate departureDate = _newDeparture.getValue();
String text = departureDate.toString(); // or format it for user locale
setText(text);
String style = date.isBefore(departureDate) ? "-fx-background-color: red" : "";
setStyle(style);
}