Как выбрать последнюю вставленную строку в JTable?

У меня есть JTable с двумя столбцами и табличной моделью, которая использует класс, который работает с хэш-картой. Элементами этой карты являются строки таблицы.

Каждый раз, когда я добавляю новый элемент, мне нужен элемент, который нужно выбрать, независимо от какой-либо сортировки. Теперь я попытался использовать следующий метод:

int lastRow = table.convertRowIndexToView(tableModel.getRowCount() - 1);
table.setRowSelectionInterval(lastRow, lastRow);

Проблема заключается в том, что это работает только тогда, когда я добавляю данные отсортированным способом (например, "A", "B", "C" и даже не тогда, поскольку, например, "D" помещается впереди A после добавления). Может ли кто-нибудь сказать мне, как решить эту проблему?

2 ответа

Проблема наиболее вероятна в вашем TableModel, так как код, который вы опубликовали, просто прекрасен. Вы упомянули, что используете HashMap для хранения данных вашего TableModel. Проблема с HashMap заключается в том, что он не имеет никакого упорядочения. Добавление элемента к нему может изменить порядок, в котором вы получаете элементы на карте.

Лучше использовать структуру данных, которая учитывает порядок.


лучше было бы использовать prepareRendered для hightlighting max row index из XxxTableModel

JTable может быть Sorted and Filtered, тогда последняя добавленная строка не может быть видна в представлении JTables

зависит от ListSelectionMode, но по умолчанию вы можете делать

table.setRowSelectionInterval(lastRow, lastRow);
table.setColumnSelectionInterval(columnMinIndex, columnMaxIndex);

для лучшей помощи скорее опубликуйте SSCCE, короткий, выполнимый, компилируемый, примерно JFrame, JTable in JScrollPane и новый addRow, выпущенный из swing.Timer

licensed under cc by-sa 3.0 with attribution.