从JTable中删除正在编辑的行

tsm*_*tsm 4 java swing jtable

我有一个JTable和一个旁边的按钮,它可以调用deleteSelectedRows(),它完全听起来像:

public void deleteSelectedRows() {
    int[] selected = jTable.getSelectedRows();
    for(int i = selected.length - 1; i >= 0; i--) {
        model.removeRow(selected[i]);
    }
    if(model.getRowCount() < 1) {
        addEmptyRow();
    }
}
Run Code Online (Sandbox Code Playgroud)

但是如果一个单元格被删除时(和/或其上方的单元格)被删除,则编辑的单元格会在剩下的时间内停留,如下所示:

然后试图退出编辑投掷,ArrayIndexOutOfBoundsException因为第5行试图访问,并且表中只剩下一行.

然后,我尝试了各种有趣的游戏jTable.getEditingRow().首先,if(selected[i] != editing)在删除之前添加一个似乎工作,但然后删除编辑单元格上方的行会导致问题.

然后我尝试了这个:

public void deleteSelectedRows() {
    int[] selected = jTable.getSelectedRows();
    int editing = jTable.getEditingRow();
    for(int s : selected) { //PS: Is there a better way of doing a linear search?
        if(s == editing) {
            return;
        }
    }
    for(int i = selected.length - 1; i >= 0; i--) {
        model.removeRow(selected[i]);
    }
    if(model.getRowCount() < 1) {
        addEmptyRow();
    }
}
Run Code Online (Sandbox Code Playgroud)

但这并没有删除任何东西.从println我撒了一下来看,最后一个要突出显示的单元格(这里有特殊的边框spam)被认为是编辑行的一部分,因此触发了我的早期return.

所以我真的不在乎解决方案是否涉及解决原始问题 - 当编辑的单元被删除时的古怪结果 - 或者这个新问题 - getEditingRow()不按我的预期行事,这只是我需要的至少其中一个发生.也就是说,我有兴趣听到这两种解决方案仅仅是出于学术上的好奇心.提前致谢.

How*_*ard 6

在从模型中删除任何行之前,请尝试包含以下行:

if (table.isEditing()) {
    table.getCellEditor().stopCellEditing();
}
Run Code Online (Sandbox Code Playgroud)