У меня проблема с Jtable и моей моделью данных.
Моя табличная модель расширяет AbstracttableModel, данные хранятся в векторе.
У меня есть функция, которая должна удалить одну или несколько строк.
Эти строки не обязательно являются смежными, потому что мой jtable установил selectionMode как это:
jTable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
Функция удаления строки (одна за другой):
public void removeMessageRow(Integer p_idMessage) {
Enumeration<MlMessage> alldatas = vData.elements();
while (alldatas.hasMoreElements()) {
MlMessage m = alldatas.nextElement();
if (m.getIdMessage() == p_idMessage) {
int idx = vData.indexOf(m);
boolean result = vData.remove(m);
// fireTableDataChanged();
// fireTableRowsDeleted(idx, idx);
fireTableStructureChanged();
return;
}
}
Когда я запускаю функцию, я выполняю цикл без проблем, в пошаговом режиме я вижу обновленный объект vData, и если я выполняю это только один раз, проблем с GUI нет. Проблема появляется, когда я выбираю более одной строки.
Например, я выбрал строку 0 и 1 в своей таблице и запустил функцию removeMessageRow, при первом выполнении vDataObject корректно обновляется (все данные сдвинуты, а последние элементы этого вектора установлены в нуль позвоните на vData.remove(m)
.
Так что в моем случае я ожидаю, что при втором выполнении объект, который нужно найти, должен быть в позиции 0, но он находится в позиции 1 как объект vData, поскольку он никогда не обновлялся.
У кого-нибудь есть идеи по этому поводу?
Я перепробовал многие в огне ... вещи, но никто не может выполнить сразу.
Спасибо за любую помощь заранее и извините за язык моего Шекспира.