Как получить TableHeaderRow из TableView в настоящее время в JavaFX?

Я видел примеры того, как получить заголовок таблицы во многих местах с кодом

TableHeaderRow header = (TableHeaderRow) tableView.lookup("TableHeaderRow");

как здесь: Как запретить TableView делать перестановку TableColumn в javaFX 8?

Но этот код возвращается null для меня.

Как добраться TableHeaderRow затем?

2 ответа

Решение

TableHeaderRow создается Skin и по умолчанию Skin не создается до применения CSS.

Вы могли бы позвонить applyCss после добавления TableView к Scene и получить доступ к TableHeaderRow после этого звонка.

В качестве альтернативы выслушайте изменения в Skin и выполнить этот код после установки скина.

Кроме того, я бы рекомендовал использовать TableViewSkinBase.getTableHeaderRow получить строку заголовка вместо использования lookup (вы используете com.sun пакеты все равно).

tableView.skinProperty().addListener((a, b, newSkin) -> {
    TableHeaderRow headerRow = ((TableViewSkinBase) newSkin).getTableHeaderRow();
    ...
});

Поиск ("TableHeaderRow"); работает, но он должен вызываться после рендеринга таблицы, иначе он вернет null

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