2014-02-16 5 views
0

У меня есть JTable и TableRowSorter, который я хотел бы, чтобы сортировать столбцы порядок сортировки, например, если у меня есть эта таблица
Сортировка JTable по порядку сортировки (многоуровневая сортировка)

(3,3, 1)
(4,3,2)
(2,4,3)
(1,2,4)
(5,2,1)
(3,1,1)
(2,2,5))
(4,5,4)
(1,1,3)
(1,3,2)

и когда я нажимаю на заголовок будет сортировать как

(1,2,4)
(1,1,3)
(1,3,2)
(2,4,3)
(2,2 , 5)
(3,3,1)
(3,1,1)
(4,5,4)
(4,5,4)
(5,2,1)

, но я хочу, когда я нажимаю на заголовок B для сортировки этого столбца. Столбец должен быть отсортирован следующим образом:

(1,1,3)
(1,2,4)
(1,3,2)
(2,2,5)
(2,4,3)
(3,1,1)
(3,3,1)
(4,3,2)
(4,5,4)
(5,2,1)

и когда я нажмите столбец с он будет таким же,

+1

Вопросы, описывающие ваши требования и просьба ко мне написать код или объяснить вам, как писать код, не относятся к теме для переполнения стека. Укажите конкретную проблему или вопрос о программировании. Включите попытки решения, объяснение того, как результаты отличаются от ожидаемых результатов, и любые сообщения об ошибках, которые вы получили. Пожалуйста, прочитайте [этот совет о том, как задавать хорошие вопросы] (http://stackoverflow.com/help/how-to-ask) –

+1

См. 'SetSortKeys()' в [* Как использовать таблицы: сортировка и фильтрация *] (http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#sorting). – trashgod

+0

@trashgod - хорошая отправная точка, но вскоре вы поймете, что использование метода 'sortKeys.add()' не собирается решать проблему OP. Потому что один из основных методов (toggleSortOrder) будет реорганизовать список sortKeys и уничтожить вашу модификацию. – amertkara

ответ

0

Вы заставили меня посмотреть на самом деле старый код, но он все еще работает:

Table Header Demo

Демо-приложение: here, вам нужно проверить SVN fwutil-trunk, чтобы он работал. Но вы также можете просто browse для соответствующего исходного кода.

0

Это не сложно реализовать, но для начала потребуется использовать JXTable от SwingX. JXTable расширяет JTable для обеспечения некоторых основных функций сетки из коробки. Однако JXTable по-прежнему поддерживает тот же порядок сортировки, который не является ожидаемой сортировкой нескольких столбцов (по крайней мере, не для меня). Взгляните на следующие моменты:

Сначала хорошо понимаем концепцию sortKeys, которая является списком, в котором хранится кто сортируется и в каком порядке индекса столбца.

  1. Продлить org.jdesktop.swingx.sort.TableSortController и переопределить метод toggleSortOrder. Этот метод упорядочивает порядок сортировки по столбцам (sortKeys). Убедитесь, что список sortKeys всегда находится в заказе first clicked column remains first.

  2. Еще одна вещь, которую вы поймете, что удаление столбца не удаляет его отсортированное состояние, а это означает, что при добавлении столбца он будет отсортирован (с символом сортировки в заголовке). Это может быть личная вещь, эксперт по UX будет знать лучше, но я думаю, что это не ожидаемое поведение.Чтобы решить эту проблему, простирайтесь на javax.swing.event.TableColumnModelListener и удалите sortKey столбца по событию columnRemoved. Чтобы связать слушателя: table.getColumnModel().addColumnModelListener(YourTableColumnModelListener(table));

  3. Кроме того, убедитесь, что maxSortKeys также поддерживается, поскольку по умолчанию JXTable сортирует только 3 столбца. Либо установите это значение в свой начальный столбец, либо обновите его каждый раз, когда столбец будет добавлен/удален (пункт 2).

  4. Наконец, если вам нужно показать порядок сортировки в заголовке, взгляните на javax.swing.table.DefaultTableCellRenderer. Вам нужно будет расширить его и переопределить метод .

PS. SwingX находится на версии 1.6.x на момент написания, и нет хорошей онлайн-документации (даже не размещены javadocs), поэтому вам нужно будет использовать javadocs из исходного кода, чтобы найти свой путь.

Последнее примечание; возможно, вы можете реализовать их без добавления слоя SwingX. Это может потребовать больше копания.

Смежные вопросы