Как вы перебираете строки в JFXTreeTableView? - PullRequest
0 голосов
/ 15 октября 2018

Я делаю проект JavaFX и использую пользовательскую библиотеку Jfoenix для более приятных компонентов.В имеющейся у меня таблице расписания мне нужно, чтобы строки стали красными, если дата начала события уже прошла, однако я нигде не могу найти в Интернете никаких ответов о том, как мне выполнять итерации по строкам.

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

.jfx-tree-table-view > .virtual-flow > .clipped-container > .sheet > .tree-table-row-cell:filled:toggleRed {
    -fx-background-color: red;
}

Так что в моем методе инициализации контроллера, я собираюсь иметь этострока, если объект строки действителен

row.pseudoClassStateChanged(PseudoClass.getPseudoClass("toggleRed"), true);

Мне нужен какой-то цикл for, чтобы получить каждую строку таблицы в таблице для вызова в этой строке, но пока не нашел ничего, что работает.Пожалуйста помоги.Я полностью потерян и потратил слишком много времени на это.Спасибо !!!

1 Ответ

0 голосов
/ 15 октября 2018

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

Следующий пример должен дать вам представление о том, как это реализовать:

final PseudoClass toggleRed = PseudoClass.getPseudoClass("toggleRed");

ObjectProperty<LocalDate> currentDate = ...;

treeTableView.setRowFactory(ttv -> new JFXTreeTableRow<Job>() {

    private final InvalidationListener listener = o -> {
        Job item = getItem();
        pseudoClassStateChanged(toggleRed, item != null && item.getStartDate().isAfter(currentDate.get()));
    };
    private final WeakInvalidationListener l = new WeakInvalidationListener(listener);

    {
        // listen to changes of the currentDate property
        currentDate.addListener(l);
    }

    @Override
    protected void updateItem(Job item, boolean empty) {
        // stop listening to property of old object
        Job oldItem = getItem();
        if (oldItem != null) {
            oldItem.startDateProperty().removeListener(l);
        }

        super.updateItem(item, empty);

        // listen to property of new object
        if (item != null) {
            item.startDateProperty().addListener(l);
        }

        // update pseudoclass
        listener.invalidated(null);
    }
});

Если даты начала и / или текущая дата неизменны, вы можете уменьшить количество используемых слушателей.

...