у меня проблема с 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, и если я выполню это только один раз, проблем с графическим интерфейсом не возникнет. Проблема возникает, когда я выбираю более одной строки. Например, я выбрал строку номер 0 и номер 1 в своей таблице и запускаю функцию removeMessageRow, при первом выполнении vDataObject корректно обновляется (все данные сдвигаются, а последние элементы этого вектора устанавливаются равными нулю с помощью вызов vData.remove(m)
. Так что в моем случае я ожидаю, что при втором выполнении искомый объект должен находиться в позиции 0, но он находится в позиции 1, поскольку объект vData никогда не обновлялся. Кто-нибудь знает об этом? Я пробовал много чего в огне..., но никто, кажется, не выполнил бы немедленно.Спасибо за любую помощь заранее и извините за мой шекспировский язык.