Класс TableRowSorter<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 для столбца:
- Если для столбца был задан
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
- См. также:
Краткое описание вложенных классов
Вложенные классы/интерфейсы, объявленные в классе 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, 2021, 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/17/docs/api/java.desktop/javax/swing/table/TableRowSorter.html