<M extends TableModel>
- Параметры типа:
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 для столбца:
- Если для столбца с помощью метода
setComparatorзаданComparator, используется он. - Если класс столбца, возвращаемый
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. Это значительно повысит производительность данного класса.
- С версии:
- 1.6
- См. также:
Краткое описание вложенных классов
Вложенные классы/интерфейсы, объявленные в классе DefaultRowSorter
DefaultRowSorter.ModelWrapper<M, I>
Вложенные классы/интерфейсы, объявленные в классе RowSorter
RowSorter.SortKey
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
TableRowSorter() |
Создаёт TableRowSorter с пустой моделью. |
TableRowSorter |
Создаёт TableRowSorter, используя model в качестве базовой TableModel. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
Comparator |
getComparator |
Возвращает Comparator для указанного столбца. |
TableStringConverter |
getStringConverter() |
Возвращает объект, отвечающий за преобразование значений модели в строки. |
void |
setModel |
Задаёт TableModel, используемую в качестве базовой модели для этого TableRowSorter. |
void |
setStringConverter |
Задаёт объект, отвечающий за преобразование значений модели в строки. |
protected boolean |
useToString |
Возвращает признак того, нужно ли преобразовывать значение в строку перед сравнением при сортировке. |
Методы, объявленные в классе 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
Методы, объявленные в классе 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://docs.oracle.com/en/java/javase/25/docs/api/java.desktop/javax/swing/table/TableRowSorter.html