我有一个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()不按我的预期行事,这只是我需要的至少其中一个发生.也就是说,我有兴趣听到这两种解决方案仅仅是出于学术上的好奇心.提前致谢.
在从模型中删除任何行之前,请尝试包含以下行:
if (table.isEditing()) {
table.getCellEditor().stopCellEditing();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1843 次 |
| 最近记录: |