Визуализация только части модели JTable - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть большая модель для отображения в JTable, и мне нужно найти способ разбить данные на страницы обычным способом: отобразить 25 записей, 50, 100, 200 или все и т. Д. Однако мне нужно сделатьэто при сохранении возможности сортировки и фильтрации данных, и это должно иметь приоритет над пределом строки.Например, если у меня есть 1000000 записей, из которых примерно 50000 начинаются с каждой буквы, и я хочу отобразить первые 100 элементов, а затем отфильтровать только элементы, начинающиеся с G, у меня должны быть первые 100 элементов, начинающиеся с G. Если яизмените фильтр на B, он должен показать первые 100 элементов, которые начинаются с B, которые были ранее невидимы.Кроме того, без фильтра сортировка должна отображать первые 100 записей, начиная с A, а сортировка снова должна отображать первые 100 записей, начиная с Z.

Что я пробовал:

  1. Ограничениезначение, возвращаемое getRowCount к значению k в модели.Это не работает, потому что сортирует / фильтрует исходные k значения.
  2. Я попытался написать собственный фильтр, который принимает только первые k записи.Это не работает, потому что фильтр применяется один раз перед сортировкой, и я не знаю, как повторно применить его после сортировки.
  3. Взломать мой путь через обработанный, чтобы он не отображал все ячейки.Не нашел способа попросить рендера ничего не делать.

Спасибо за вашу помощь.

1 Ответ

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

Не связывайтесь с самим рендером и таблицей - проблема кроется в другом месте.

Вам нужна табличная модель, способная разбивать на страницы.Разбивка на страницы может выполняться двумя способами:

  • Разбиение на страницы сайта (стиль Google): показывать N записей на странице и показывать только определенную страницу (измените текущую страницу с помощьюкнопки: [<] [1] [2] [3] ... [>])
  • Бесконечная прокрутка : модель виртуальной таблицы, загрузка видимых данных по запросу.Очевидно, что лучшее решение, если вы спросите меня.

Реализация бесконечной прокрутки:

  • табличная модель действует как адаптер для хранилища , гдеизвлекаются фактические данные (поддерживается фильтрация , разбиение на страницы (получение количества строк и страниц запросов со смещением и размером страницы) и сортировка ).
  • табличная модель кэширует запрошенные страницы данных.
  • когда запрашивается конкретная строка (через интерфейс модели таблицы), табличная модель пытается обслуживать строку из кэша.Если строка не кэшируется, модель таблицы запускает асинхронную загрузку страницы и возвращает пустую (sentinel) строку (средство визуализации ячеек может затем показать индикатор загрузки для таких строк).
  • асинхроннозагрузка страниц загружает запрошенные страницы из хранилища (и гарантирует, что одна и та же страница загружается только один раз при одновременном запросе ее несколько раз) и возвращает их в модель таблицы.
  • модель таблицы, как только она получает запрошенный асинхронностраница, запускает событие изменения модели таблицы для строк полученной страницы, поэтому таблица перерисовывается должным образом.

Преимущества:

  • попользователь, похоже, все данные доступны
  • загружаются только те данные, которые запрашиваются из модели
  • данные загружаются быстро и асинхронно, что делает представление очень отзывчивым
  • сортировка и фильтрация выполняются в бэкэнде / репозитории, поэтому нет необходимости обрабатывать и отбрасывать огромные объемы данных.В клиенте
  • хорошо работает с базами данных и интерфейсами REST, которые поддерживают фильтрацию, сортировку и разбиение на страницы.
  • это действительно способ использования JTables (модель в качестве адаптера, шаблон рендеринга в полутяжелом весе вUI).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...