JavaFX setCellFactory 没有设置我的项目

JavaFX setCellFactory doesn't set my item

我的 cellFactory 有问题。 我希望如果在 FX TableView 中将日期设置为我的对象,则 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"));

知道我做错了什么吗?

您需要设置节点的文本。当你检测到它为空时你确实清除它,但当它不是时你不设置它。如果单元格为空,您也会忘记清除样式。

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);
}