正在編輯我有一個JTable和旁邊調用deleteSelectedRows()
,這也正是它聽起來像一個按鈕:刪除行從JTable中
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();
}
}
但是,如果電池在行爲被當編輯它(和/或細胞在其上方)已被刪除,編輯的細胞停留而其餘的離開,就像這樣:
然後試圖退出編輯出來扔了一個ArrayIndexOutOfBoundsException
因爲第5行是想被訪問和th只剩下一行了。
然後我用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();
}
}
但是,這並不刪除任何東西,永遠。從println
來看,最後一個要突出顯示的單元格(在這裏看到的特殊邊框spam
)被認爲是編輯行的一部分,因此觸發了我的早期return
。
所以,我真的不關心解決方案是否涉及固定最初的問題 - 那古怪的結果時,正在編輯一個單元已被刪除 - 或者這個新的問題 - 即getEditingRow()
不按照我的預期行事,只是我至少需要其中的一個纔會發生。也就是說,我有興趣聽到兩種解決方案出於學術好奇。提前致謝。
謝謝,這樣做! – tsm 2011-06-14 20:19:57
正確但不完整:不包括編輯拒絕停止的情況,需要像f.i一樣的後備。在這種情況下取消 – kleopatra 2011-06-15 08:27:55