У меня проблема блокировки с функцией сортировки JTable; Это остановило разработку проекта с открытым исходным кодом в свободное время на 4 месяца. Надеюсь, что вас укажут в правильном направлении.
Контекст: Я работаю над расширением функциональности ps3mediaserver для добавления библиотеки мультимедиа с pms-mlx . Пользовательский интерфейс медиа-сервера выполнен с использованием Swing.
Проблема: При щелчке по заголовку столбца в JTable, кажется, случайный столбец сортируется вместо того, по которому щелкнули.
Текущая реализация: Вот описание различных компонентов и классов, используемых для реализации:
- ETable : Поскольку альтернативные цвета строк не поддерживаются по умолчанию в JTable, я переключился на ETable, расширяющий JTable. Источник здесь
- FileDisplayTable : Это класс, создающий таблицу. В методе init () сортировка включена с помощью 'table.setAutoCreateRowSorter (true);'
- FileDisplayTableCellRenderer : существует для всегда выравнивания содержимого ячейки слева
- FileDisplayTableColumnModel : выполняет ли некоторое сопоставление между внутренними типами и именами столбцов
- FileDisplayTableAdapter : этот класс реализует com.jgoodies.binding.adapter.AbstractTableAdapter для сопоставления объектов со столбцами таблицы.
Возможные решения:
- Предпочтительно, я бы хотел сохранить текущую реализацию и выяснить, как исправить сортировку, но я сомневаюсь, что кто-то может помочь мне с этим !? Кроме того, они являются частью кода, который мне пришлось добавить из-за странного поведения; они прокомментированы в коде
- Альтернативным вариантом будет полное изменение JTable для другого элемента управления. Я провел некоторое исследование, но не нашел решения, на которое надеялся. Ограничения в том, что
- он должен быть встраиваемым в пользовательский интерфейс
- желательно, чтобы он поддерживал привязки данных
- поддержка альтернативных цветов строк
- сортировка строк
В какой-то момент можно будет открыть диалоговое окно редактирования, где содержимое строки должно быть извлечено, отредактировано и когда сохранено, строка должна быть обновлена.
Прежде чем переделывать всю вещь, я хотел бы убедиться, что компонент сможет обрабатывать все, что я хочу с ним сделать.
Я больше привык создавать графические интерфейсы с использованием .NET в Visual Studio. Это совсем по-другому, и намного сложнее сделать то же самое со свингом. Пожалуйста, покажи мне, что я не прав:)
[править] Если кто-то хочет воспроизвести проблему, либо получите исходный код или двоичные файлы, запустите приложение, перейдите на вкладку библиотеки мультимедиа. В разделе Genral импортируйте несколько видео, добавив несколько видеофайлов. Перейдите в раздел библиотеки, нажмите «Применить», чтобы обновить список, и попробуйте отсортировать таблицу.