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