JTable с проблемой сортировки jgoodies - PullRequest
4 голосов
/ 24 августа 2011

У меня проблема блокировки с функцией сортировки 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 импортируйте несколько видео, добавив несколько видеофайлов. Перейдите в раздел библиотеки, нажмите «Применить», чтобы обновить список, и попробуйте отсортировать таблицу.

1 Ответ

2 голосов
/ 24 августа 2011

Может быть полезно знать, что столбцы JTable могут быть перетащены пользователем. В результате представление (JTable или подкласс) и модель (реализация TableModel) могут иметь разные номера столбцов. Аналогично, RowSorter может влиять на порядок или количество строк в представлении по сравнению с моделью. Связанные методы преобразования упомянуты в Как использовать таблицы: сортировка и фильтрация . В частности: «При использовании сортировщика всегда не забывайте переводить координаты ячейки».

Приложение: В качестве альтернативы рассмотрим org.netbeans.swing.etable.ETable или его подкласс org.netbeans.swing.outline.Outline, обозначенное здесь .

...