Сортировка JXTable с SwingX - PullRequest
6 голосов
/ 21 мая 2011

Я использую JXTable из компонентов SwingX.Если я использую метод setSortable(boolean flag), он включит или отключит сортировку для всех столбцов.

По моему требованию я хочу отключить сортировку для нескольких столбцов и включить сортировку для других столбцов.

Кто-нибудь может помочь в достижении этой функциональности?


Спасибо за ваш ответ.Можете ли вы помочь мне с использованием setSorterClass(String sorterClassName), чтобы отключить сортировку для одного столбца?Не могли бы вы дать мне пример кода?Это будет очень полезно для меня.

Ответы [ 3 ]

4 голосов
/ 14 июня 2011

SwingX поддерживает свойство сортировки по столбцам на уровне TableColumnExt. Значение по умолчанию - true, чтобы отключить его после создания столбца

table.getColumnExt(myColumnIndex).setSortable(false)

Или во время создания используйте пользовательский ColumnFactory, например

ColumnFactory factory = new ColumnFactory() {

    @Override
    public void configureTableColumn(TableModel model, TableColumnExt column) {
        super.configureTableColumn(model, column);
        if (... your condition to disable sortable) {
            column.setSortable(false);
        } 
    }
} 
table.setColumnFactory(factory);
table.setModel(model);

JXTable позаботится о синхронизации свойства столбца с сортировщиком, при условии, что оно имеет тип SortController (который используется по умолчанию)

2 голосов
/ 21 мая 2011

Я думаю, по крайней мере, согласно тому, что я нашел в сети, вы можете достичь этого, установив setSorterClass(null) для этого столбца.

Как мы можем прочитать на кэшированном веб-сайте , поскольку страница учебника swinglabs, кажется, закрыта, я уверен, что это как-то связано с недавним беспорядком в сервисе java.net. "В JXTables сортировка столбцов включена по умолчанию. Вы можете отключить сортировку всех столбцов с помощью setSortingEnabled (boolean allowSort). Вы также можете отключить сортировку по одному столбцу с помощью setSorterClass (String sorterClassName) с нулевым именем класса сортировщика."

Лично я думаю, что нет смысла блокировать сортировку пользователя по выбранному столбцу таблицы. В любом случае, если пользователь хочет отсортировать столбец, он / она должен иметь возможность сделать это, в конце я считаю, что лучше разрешить пользователю больше, чем меньше, конечно, когда речь идет о таких деталях, как то, что он / она может контроль по его / ее мнению.

1 голос
/ 21 мая 2011

Я думаю, вам следует взглянуть на TableRowSorter API и посмотреть, поддерживает ли его JXTable, например:

TableModel myModel = createMyTableModel();
JTable table = new JTable(myModel);
table.setRowSorter(new TableRowSorter(myModel));

В TableRowSorter есть метод API isSortable () :

public boolean isSortable (int column)

Возвращает true, если указанный столбец является сортируемым;в противном случае - false.

Параметры: столбец - столбец для проверки сортировки в терминах базовой модели

Возвращает: true, если столбец является сортируемым

...