У меня проблема с моей 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);
}
Спасибо за быстрый ответ. Я думал, что строка "setItem (item);" в методе super установит элемент и будет соответствовать моим потребностям. Я не понимал, что мне также нужно использовать setText. Большое спасибо!
«Насколько я понимаю, это должно происходить в вызове
super()». Нет:TableCell.updateItem(...)не устанавливает никакого текста.