Как отслеживать индекс строки, когда JTable был отсортирован пользователем?

У меня есть JTable, у которого 1-я строка пустая. Теперь, когда я сортирую таблицу на основе столбца, нажимая на этот столбец, пустая строка идет внизу. Если я вставляю что-то в пустую строку и сортирую, то строка помещается соответственно. Как отслеживать индекс строки, даже если он отсортирован. Мне нужно получить доступ к этой строке, но если пользователь выполнит сортировку, я потеряю индекс строки, так как это уже не первая строка.

Ответ 1

Предполагая, что вы используете материал TableRowSorter, добавленный в Java 6, я думаю, что вам нужно взглянуть на методы convertRowIndexToModel и convertRowIndexToView в классе RowSorter. Вы бы сделали что-то вроде

table.getRowSorter().convertRowIndexToView(0)

чтобы узнать, какой индекс видимой строки действительно является индексом строки 0 из вашей модели.

Изменить: как указал Тульский в комментариях, это может вызвать исключение NullPointerException, если сортировщик строк не назначен для таблицы. Лучше использовать методы непосредственно на JTable, например, table.convertRowIndexToView(0)

Ответ 3

РЕШЕНИЕ 1

При использовании jTable1.convertRowIndexToModel(jTable1.getSelectedRow()) возникает некоторая проблема, если сортировка значений в соответствии с датой или временем вернет неправильные значения из convertRowIndexToView(0), поэтому используйте convertRowIndexToModel(0).

РЕШЕНИЕ 2

Это будет извлекаться из новой модели при сортировке.

jTable1.getValueAt(jTable1.getSelectedRow(), 0);

Это будет извлекать значение в соответствии с исходным индексом даже при сортировке.

((DefaultTableModel)jTable1.getModel()).getValuAt(jTable1.getSelectedRow(), 0);