JavaFX setCellFactory не устанавливает мой элемент

У меня проблема с моей 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"));

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

«Насколько я понимаю, это должно происходить в вызове super()». Нет: TableCell.updateItem(...) не устанавливает никакого текста.

James_D 25.04.2018 23:05
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
549
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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);
}

Спасибо за быстрый ответ. Я думал, что строка "setItem (item);" в методе super установит элемент и будет соответствовать моим потребностям. Я не понимал, что мне также нужно использовать setText. Большое спасибо!

J K 25.04.2018 23:20

Другие вопросы по теме