Класс TableRowSorter<M extends TableModel>
- Type Parameters:
M- тип модели, который должен быть реализациейTableModel
public class TableRowSorter<M extends TableModel> extends DefaultRowSorter<M,Integer>
RowSorter, которая обеспечивает сортировку и фильтрацию с помощью TableModel. Следующий пример демонстрирует добавление сортировки к JTable: TableModel myModel = createMyTableModel(); JTable table = new JTable(myModel); table.setRowSorter(new TableRowSorter(myModel));Это позволит выполнить всю необходимую настройку, чтобы при выполнении соответствующего жеста пользователем, например, нажатии на заголовок столбца, таблица визуально сортировалась.
Методы класса JTable, относящиеся к строкам, и модель выделения класса JTable относятся к представлению, а не к основной модели. Поэтому необходимо преобразовывать между ними. Например, чтобы получить выделение в терминах myModel, необходимо преобразовать индексы:
int[] selection = table.getSelectedRows();
for (int i = 0; i < selection.length; i++) {
selection[i] = table.convertRowIndexToModel(selection[i]);
}
Аналогично, чтобы выделить строку в JTable на основе координаты из основной модели, выполните обратное преобразование:
table.setRowSelectionInterval(table.convertRowIndexToView(row),
table.convertRowIndexToView(row));
Предыдущий пример предполагает, что фильтрация не включена. Если фильтрация включена, convertRowIndexToView вернёт -1 для расположений, которые не видны в представлении.
TableRowSorter использует Comparator для выполнения сравнений. Следующее определяет, как выбирается Comparator для столбца:
- Если для столбца был указан
ComparatorметодомsetComparator, используйте его. - Если класс столбца, возвращаемый методом
getColumnClass, являетсяString, используйтеComparator, возвращаемый методомCollator.getInstance(). - Если класс столбца реализует интерфейс
Comparable, используйтеComparator, который вызывает методcompareTo. - Если указан
TableStringConverter, используйте его для преобразования значений вString, а затем используйтеComparator, возвращаемый методомCollator.getInstance(). - В противном случае используйте
Comparator, возвращаемый методомCollator.getInstance(), по результатам вызова методаtoStringдля объектов.
В дополнение к сортировке, TableRowSorter предоставляет возможность фильтрации. Фильтр задаётся с помощью метода setFilter. Следующий пример покажет только строки, содержащие строку "foo":
TableModel myModel = createMyTableModel();
TableRowSorter sorter = new TableRowSorter(myModel);
sorter.setRowFilter(RowFilter.regexFilter(".*foo.*"));
JTable table = new JTable(myModel);
table.setRowSorter(sorter);
Если структура основной модели изменяется (вызывается метод modelStructureChanged), сбрасываются следующие значения: Comparator по столбцам, текущий порядок сортировки и сортируемость каждого столбца. По умолчанию порядок сортировки естественный (тот же, что и в модели), а столбцы сортируются по умолчанию.
TableRowSorter имеет один формальный параметр типа: тип модели. Передача типа, точно соответствующего вашей модели, позволяет фильтровать на основе вашей модели без приведения типов. Обратитесь к документации по RowFilter для примера.
ПРЕДУПРЕЖДЕНИЕ: DefaultTableModel возвращает класс столбца типа Object. Поэтому все сравнения будут выполняться с использованием toString. Это может быть излишне дорогостоящим. Если столбец содержит только один тип значения, например, Integer, переопределите метод getColumnClass и верните соответствующий Class. Это значительно повысит производительность этого класса.
- Since:
- 1.6
- See Also:
Краткое описание вложенных классов
Вложенные классы/интерфейсы, объявленные в классе javax.swing.DefaultRowSorter
DefaultRowSorter.ModelWrapper<M, I>
Вложенные классы/интерфейсы, объявленные в классе javax.swing.RowSorter
RowSorter.SortKey
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
TableRowSorter() |
Создаёт TableRowSorter с пустой моделью. |
TableRowSorter |
Создаёт TableRowSorter, используя model в качестве основной TableModel. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
Comparator |
getComparator |
Возвращает Comparator для указанного столбца. |
TableStringConverter |
getStringConverter() |
Возвращает объект, ответственный за преобразование значений из модели в строки. |
void |
setModel |
Устанавливает TableModel для использования в качестве основной модели для этого TableRowSorter. |
void |
setStringConverter |
Устанавливает объект, ответственный за преобразование значений из модели в строки. |
protected boolean |
useToString |
Возвращает, нужно ли преобразовывать значение в строку перед выполнением сравнений при сортировке. |
Методы, объявленные в классе javax.swing.DefaultRowSorter
allRowsChanged, convertRowIndexToModel, convertRowIndexToView, getMaxSortKeys, getModel, getModelRowCount, getModelWrapper, getRowFilter, getSortKeys, getSortsOnUpdates, getViewRowCount, isSortable, modelStructureChanged, rowsDeleted, rowsInserted, rowsUpdated, rowsUpdated, setComparator, setMaxSortKeys, setModelWrapper, setRowFilter, setSortable, setSortKeys, setSortsOnUpdates, sort, toggleSortOrder
Методы, объявленные в классе javax.swing.RowSorter
addRowSorterListener, fireRowSorterChanged, fireSortOrderChanged, removeRowSorterListener
Подробное описание конструкторов
TableRowSorter
public TableRowSorter()
TableRowSorter с пустой моделью.TableRowSorter
public TableRowSorter(M model)
TableRowSorter, используя model в качестве базовой TableModel.- Параметры:
-
model- базоваяTableModelдля использования,nullобрабатывается как пустая модель
Подробное описание методов
setModel
public void setModel(M model)
TableModel для использования в качестве базовой модели для этого TableRowSorter. Значение null может использоваться для установки пустой модели.- Параметры:
-
model- используемая базовая модель, илиnull
setStringConverter
public void setStringConverter(TableStringConverter stringConverter)
null, он используется для преобразования любых значений объектов, для которых не зарегистрирован Comparator, в строки.- Параметры:
-
stringConverter- объект, ответственный за преобразование значений из модели в строки
getStringConverter
public TableStringConverter getStringConverter()
- Возвращает:
- объект, ответственный за преобразование значений в строки.
getComparator
public Comparator<?> getComparator(int column)
Comparator для указанного столбца. Если Comparator не был задан с помощью метода setComparator, будет возвращён Comparator, основанный на классе столбца (TableModel.getColumnClass) указанного столбца. Если класс столбца - String, возвращается Collator.getInstance. Если класс столбца реализует Comparable, возвращается закрытый Comparator, вызывающий метод compareTo. В противном случае возвращается Collator.getInstance.- Переопределяет:
-
getComparatorв классеDefaultRowSorter<M extends TableModel, Integer> - Параметры:
-
column- столбец, для которого требуетсяComparator, с точки зрения базовой модели - Возвращает:
Comparatorдля указанного столбца- Исключения:
-
IndexOutOfBoundsException- если столбец находится вне диапазона базовой модели
useToString
protected boolean useToString(int column)
ModelWrapper.getStringValueAt, иначе - ModelWrapper.getValueAt. Подклассы, такие как TableRowSorter, должны учитывать это значение в реализации их ModelWrapper.- Переопределяет:
-
useToStringв классеDefaultRowSorter<M extends TableModel, Integer> - Параметры:
-
column- индекс столбца для проверки, с точки зрения базовой модели - Возвращает:
- true, если значения должны быть преобразованы в строки перед сравнением при сортировке
- Исключения:
-
IndexOutOfBoundsException- еслиcolumnнедействителен
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://download.java.net/java/early_access/jdk24/docs/api/java.desktop/javax/swing/table/TableRowSorter.html