Spec-Zone.ru › OpenJDK 25

<M extends TableModel>

java.lang.Object
javax.swing.RowSorter<M>
javax.swing.DefaultRowSorter<M,Integer>
javax.swing.table.TableRowSorter<M>
Параметры типа:
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 для столбца:

  1. Если для столбца с помощью метода setComparator задан Comparator, используется он.
  2. Если класс столбца, возвращаемый getColumnClass, — String, используется Comparator, возвращаемый Collator.getInstance().
  3. Если класс столбца реализует Comparable, используется Comparator, вызывающий метод compareTo.
  4. Если задан TableStringConverter, он используется для преобразования значений в String, после чего используется Comparator, возвращаемый Collator.getInstance().
  5. В противном случае используется 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
См. также:
  • JTable
  • RowFilter
  • DefaultTableModel
  • Collator
  • Comparator

Краткое описание вложенных классов

Вложенные классы/интерфейсы, объявленные в классе DefaultRowSorter

DefaultRowSorter.ModelWrapper<M,I>

Вложенные классы/интерфейсы, объявленные в классе RowSorter

RowSorter.SortKey

Краткое описание конструкторов

Конструктор Описание
TableRowSorter()
Создаёт TableRowSorter с пустой моделью.
TableRowSorter(M model)
Создаёт TableRowSorter, используя model в качестве базовой TableModel.

Краткое описание методов

Модификатор и тип Метод Описание
Comparator<?> getComparator(int column)
Возвращает Comparator для указанного столбца.
TableStringConverter getStringConverter()
Возвращает объект, отвечающий за преобразование значений модели в строки.
void setModel(M model)
Задаёт TableModel, используемую в качестве базовой модели для этого TableRowSorter.
void setStringConverter(TableStringConverter stringConverter)
Задаёт объект, отвечающий за преобразование значений модели в строки.
protected boolean useToString(int column)
Возвращает признак того, нужно ли преобразовывать значение в строку перед сравнением при сортировке.

Методы, объявленные в классе 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

Методы, объявленные в классе Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Подробное описание конструкторов

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)
Возвращает признак того, нужно ли преобразовывать значение в строку перед сравнением при сортировке. Если значение равно true, используется ModelWrapper.getStringValueAt, в противном случае — ModelWrapper.getValueAt. Подклассы, например TableRowSorter, должны учитывать это значение в своей реализации ModelWrapper.
Переопределяет:
useToString в классе DefaultRowSorter<M extends TableModel, Integer>
Параметры:
column — индекс проверяемого столбца в терминах базовой модели
Возвращает:
true, если перед сравнением при сортировке значения следует преобразовывать в строки
Вызывает исключение:
IndexOutOfBoundsException — если column недопустим

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, включая концептуальные обзоры, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторские права © 1993, 2025, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API