我遇到了Jtable和我的dataModel问题。 我的表模型扩展了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被正确更新(所有数据都被删除,并且此向量的最后元素被设置为null致电vData.remove(m)
。
所以在我的情况下,我希望在第二次执行时,要查找的对象应该位于位置0,但它位于位置1,因为vData对象从未更新过。
有人对此有所了解吗?
我已经尝试了许多火上浇油的东西,但没有人能立即执行。
感谢您提前提供的任何帮助,抱歉我的莎士比亚语言。
答案 0 :(得分:14)
在模型中添加一个方法,将一组索引删除(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]);
}
}
答案 1 :(得分:0)
int[] selectedRow = tblUsuarios.getSelectedRows();
int del=1;
for(int j=0; j<selectedRow.length; j++){
modTabla.removeRow(selectedRow[j]);
if(j<selectedRow.length-1){
selectedRow[j+1] = selectedRow[j+1]-del;
del = del+1;
}
}
//modTabla = defaultTableModel
//tblUsuarios = jtable