JTable и сортировка - PullRequest
       1

JTable и сортировка

0 голосов
/ 24 декабря 2011

У меня небольшая проблема с сортировкой моего JTable, я не могу получить нужную мне функциональность.В моем окне у меня есть что-то вроде total commander, в одном столбце есть файлы и, если есть, родительская папка в другом или количество байтов.Что я хочу, так это то, что если я щелкаю по столбцу «Имя файла», я хочу, чтобы родительская папка всегда была сверху, затем по возрастанию / убыванию имен папок, а затем по возрастанию / убыванию имен файлов, и если я нажимаю на «Тип файла», я хочу, чтобы каталоги оставались нетронутыми, а затемхочу нормальные файлы в порядке возрастания / убывания по их размеру.

Я пытался поиграть с RowSorters, моими собственными компараторами, но, как я уже сказал, я не могу получить то, что хочу, я должен поймать событие сам, а затем вручнуюсортировать значения и обновлять мою модель (которую я использую кстати)?Есть ли какой-нибудь элегантный способ сделать то, что я хочу?

1 Ответ

2 голосов
/ 24 декабря 2011

Звучит так, как будто вы хотите использовать вместо этого древовидную таблицу. Пожалуйста, посмотрите на: http://java.sun.com/products/jfc/tsc/articles/treetable1/

Если вы хотите использовать сам JTable, вы можете попробовать выполнить сортировку в табличной модели, поскольку это может быть проще.

TableRowSorter<TableModel> sorter =
    new TableRowSorter<TableModel>(getModel()) {
    Map<Integer, SortKey> keys = new HashMap<Integer, SortKey>();

    public void toggleSortOrder(int column)
    {
        SortKey key = keys.get(column);
        SortOrder order = null;
        // Get last sort order.
        if (key != null) {
            if (key.getSortOrder() == SortOrder.DESCENDING){
                order = SortOrder.ASCENDING;
            }
            else {
                order = SortOrder.DESCENDING;
            }
        }
        else {
            order = SortOrder.DESCENDING;
        }

        keys.put(new SortKey(column, order));
        getTableModel().sort(keys);
    }
};

setRowSorter(sorter);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...