У меня есть пользовательский редактор (для LocalDate
) в столбце 1 (т.е. во втором столбце, с деревом в столбце 0).
Пользовательский редактор - это, по сути, код TextFieldTreeTableCell
, а затем улучшенный (вы не можете на самом деле создать подкласс этого класса, потому что, например, его обязательное поле textField
равно private
).
Я пытаюсь сделать так, чтобы, если дата истекла, она имела особую окраску. Это достаточно просто сделать в updateItem()
, методе рендеринга.
Но я также хочу сделать так, чтобы, если это выбранная строка (NB "выбор ячейки" выключен), окраска будет отличаться от невыбранной строки.
Это достигается в редакторе по умолчанию (использующем TextFieldTreeTableCell
), используемом для такого столбца: вы видите белый шрифт на синем фоне при выборе, но черный на белом для невыбранного).
Я нашел способ определить, является ли строка выбрано:
getTreeTableRow().isSelected()
(NB, делающий isSelected()
на самой ячейке, всегда возвращает false
, если выбор ячейки выключен).
... и я вижу это, когда есть это рендер соответствующей строки с редактором по умолчанию, «выбранная» раскраска действительно применяется.
Чего я не могу найти, так это того, как изменение выделения приводит к повторному рендерингу. Это должно быть где-то в кишечнике кода для TextFieldTreeTableCell
, может быть TreeTableCell
или, возможно, класса CellUtils
(package-private в этом пакете). Я изучил источник этих классов, но не могу найти механизм.
Так что на данный момент это выглядит так:
... тогда как я хочу, чтобы дата истечения срока действия (2019-04-17) в невыбранной строке визуально отличалась: например, бледно-желтый фон и бледно-розовый шрифт.
PS I Мы обнаружили, что это «рендеринг при выделении / отмене выбора» не происходит посредством вызова метода updateItem
ячейки редактора. Так что что-то еще должно быть в состоянии вызвать рендеринг, и, возможно, мне придется поместить код, который применяет раскраску где-то, кроме updateItem
.