我的 Jtable 和我的数据模型有问题。
我的表模型扩展了 AbstracttableModel,数据存储在一个 Vector 中。
我有一个功能女巫假设删除一行或多行。
这些行不一定是连续的,因为我的 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 对象从未更新过。
有人对此有什么想法吗?
我已经尝试了很多着火......但没有人可以立即执行。
感谢您提前提供的任何帮助,并为我的莎士比亚的语言感到抱歉。
最佳答案
在您的模型中添加一个方法,该方法采用要删除的索引集合( Set<Integer>
或 int[]
),对此集合进行排序,在此集合中向后迭代,并删除模型对象列表中的元素:
public void removeRows(int[] indices) {
Arrays.sort(indices);
for (int i = indices.length - 1; i >= 0; i--) {
this.data.remove(indices[i]);
fireTableRowsDeleted(indices[i], indices[i]);
}
}
关于swing - 在 JTable AbstractDataModel 中一次性删除多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8294924/