【问题标题】:Why I cannot remove the cell in my jtable为什么我无法删除 jtable 中的单元格
【发布时间】:2026-01-19 05:40:01
【问题描述】:

看我的方法

public void removeRow(int[] selectedRow) {
    int len = selectedRow.length;
    for(int i=0; i<len; i++) {
        data.remove(selectedRow[i]);
    }
    fireTableDataChanged();
}

这是错误调用堆栈

线程“AWT-EventQueue-0”java.lang.IndexOutOfBoundsException 中的异常:索引:1,大小:1 在 java.util.ArrayList.RangeCheck(ArrayList.java:547) 在 java.util.ArrayList.remove(ArrayList.java:387) 在 table.MyTableModel.removeRow(MyTableModel.java:89) 在 table.Tables$2.actionPerformed(Tables.java:61) 在 javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) 在 javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) 在 javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) 在 javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)

我使用静态 ArrayList 数据作为数据持有者

【问题讨论】:

    标签: java swing jtable


    【解决方案1】:

    问题在于,当您删除一行时,您的表索引会在每次删除时调整/递减,从而导致 IndexOutOfBoundsException。您可以以相反的顺序删除行以防止这种情况发生:

    for (int i = selectedRow.length - 1; i >= 0; i--) {
       data.removeRow(selectedRow[i]);
    }
    

    【讨论】:

    • +1 哦,很好...假设 selectedRows 或按升序排列 ;)
    【解决方案2】:

    问题是,一旦您删除一行,selectedRow 索引就不再匹配 data 列表中的行

    例如,如果我有两行并且我想删除第 0 行和第 1 行,那么当我删除第 0 行时,第 1 行不再存在(它变为 0)

    您需要做的是创建一个临时列表,其中包含您实际要删除的行...

    List<MyRowData> toDelete = new ArrayList<MyRowData>(selectedRow.length);
    for(int index : selectedRow) {
        toDelete.add(data.get(index));
    }
    

    您应该能够简单地使用List#removeAlldata 列表中删除要删除的行

    data.removeAll(toDelete);
    

    【讨论】:

      最近更新 更多