5

我遇到了 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 对象从未更新过。有人对此有想法吗?我已经尝试过很多着火的东西......但没有人可以立即执行。感谢您提前提供的任何帮助,并对我的莎士比亚语言感到抱歉。

4

2 回答 2

18

在模型中添加一个方法,获取要删除的索引集合(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]);
    }
}
于 2011-11-28T11:46:07.453 回答
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
于 2015-08-23T07:47:52.833 回答