JavaFX setCellFactory不设置我的项目

时间:2018-04-25 20:49:54

标签: java user-interface javafx javafx-8

我的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"));

任何想法我做错了什么?

1 个答案:

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