Как предотвратить скрытие горизонтальной полосы прокрутки, когда в TableView нет элементов?

Я разрабатываю приложение JavaFX и использую TableView для отображения данных из базы данных. Столбцы не всегда располагаются горизонтально, поэтому появляется горизонтальная полоса прокрутки. Мои пользователи запросили функцию фильтрации для каждого столбца, которую я реализовал, поместив TextField в заголовок столбца таблицы и используя FilteredList для содержимого таблицы. Когда пользователь вводит, предикат фильтра обновляется. Это работает, пользователям это нравится. Но есть неприятный краеугольный случай. Когда фильтруемый столбец находится за пределами обычного окна просмотра TableView, и пользователь отфильтровывает все данные, которые TableView только что сбрасывает, горизонтальная полоса прокрутки скрывается. Отсюда нет доступа к фильтрующему TextField, поскольку он находится за пределами области просмотра, а горизонтальная полоса прокрутки недоступна. Есть ли способ предотвратить скрытие горизонтальной полосы прокрутки, когда в TableView нет элементов? Я ничего не нашел в документах API.


person Benjámin Budai    schedule 25.11.2020    source источник
comment
не поддерживается, вам нужен пользовательский VirtualFlow для взлома   -  person kleopatra    schedule 25.11.2020


Ответы (1)


Посмотрев исходный код TableViewSkin и TableViewSkinBase, я придумал быстрый и грязный обходной путь:

    tv.setSkin(new TableViewSkin<Document>(tv) {
        @Override
        protected int getItemCount() {
            return super.getItemCount()+1;
        }
    });

Он имитирует дополнительную строку, поэтому код, который срабатывает, когда таблица пуста, никогда не запускается. Дополнительное пространство после последней строки данных не беспокоит моих пользователей.

person Benjámin Budai    schedule 25.11.2020