Сортировка и фильтрация представлений: сортировка и фильтрация GlazedList + JTable vs Glazed список событий + JXTable

StackOverflow https://stackoverflow.com/questions/7833179

Вопрос

Я хочу создавать пользовательские представления (таблицы) с возможностями сортировки и фильтрации.Я использую EventList ( Glazed Lists ) в качестве источника для EventTableModel.В GlazedLists также есть отсортированный список и некоторые элементы фильтрации, поэтому я могу использовать их для создания представления.Но я нашел JXTable, и у него есть методы для сортировки и фильтрации, и вот как я хочу, чтобы он работал: сортировка и фильтрация должны предоставлять компонент пользовательского интерфейса, а модель просто может хранить данные:

родовое слово

Но GlazedLists также предоставляет SortedList (декоратор для EventList с сортировкой) и некоторые методы фильтрации.

родовое слово

И вопрос: какая модель лучше.Или, может быть, оба ошибаются, а что использовать для создания представлений?

Это было полезно?

Решение

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

Функции сортировки и фильтрации GlazedLists намного более гибкие, чем в JXTable. Просто убедитесь, что у вас не включены оба, иначе все запутается. Вот мой обычный фрагмент кода для использования SortedList с JXTable:

родовое слово

Что это значит:

  • включите гаджет выбора столбца в правом верхнем углу JXTable.
  • отключить встроенную сортировку JXTable
  • вместо этого установите функции сортировки GlazedLists.
  • настроить таблицу с помощью EventTableModel, полученного из TableFormat

Обратите внимание, что вы передаете два EventList, displayItems, который является списком в конце конвейера, и sortedList, используемый для управления, какой столбец используется для сортировки, что может быть раньше в конвейера, чем список displayItems. (Если вашим последним элементом является sortedList, без какой-либо обработки после этого просто передайте список дважды.)

Другие советы

Если вы используете DefaultEventTableModel, все в порядке.Поскольку модель регистрирует сортировщики в источнике EventList.Это делается внутренне, как в вашем 2-м листинге.Если вы регистрируете сортировщики вручную, вам нужно реализовать весь код, чтобы изменить компаратор (например, asc, desc).При попытке использовать фильтрацию это то же самое, но JXTable imho не поддерживает механизм для этого, поэтому вы должны сделать это по-своему.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top