Как отслеживать индекс строки, когда JTable был отсортирован пользователем? - PullRequest
10 голосов
/ 11 ноября 2010

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

Ответы [ 3 ]

14 голосов
/ 11 ноября 2010

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

table.getRowSorter().convertRowIndexToView(0)

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

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

13 голосов
/ 11 ноября 2010

JTable.convertRowIndexToView() вернет вам индекс строки в представлении на основе его индекса в модели. JTable.convertRowIndexToModel() поступит наоборот.

0 голосов
/ 06 января 2015

РЕШЕНИЕ 1

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

РЕШЕНИЕ 2

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

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

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

((DefaultTableModel)jTable1.getModel()).getValuAt(jTable1.getSelectedRow(), 0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...