JavaFX setCellFactory не устанавливает мой элемент - PullRequest
0 голосов
/ 25 апреля 2018

У меня проблема с моим cellFactory.Я хочу, чтобы, если Date установлен на мой объект внутри 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"));

Есть идеи, что я делаю неправильно?

1 Ответ

0 голосов
/ 25 апреля 2018

Вам необходимо установить текст узла.Вы очищаете его, когда обнаруживаете, что он пуст, но не устанавливаете его, когда это не так.Вы также забудете очистить стиль, если ячейка пуста.

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