JTable通过单击具有来自同一JTable的自定义DeleteCellEditor的单元格来删除行

时间:2012-03-28 20:14:59

标签: java swing jtable

在一个名为HistoryPanel的类中,我有一个名为resultsTable的静态JTable,其静态DefaultTableModel名为tableModel。该表有一个自定义单元格编辑器:

resultsTable.getColumn("Delete").setCellEditor(new DeleteButtonEditor(new JCheckBox()));

在内部,我自然会覆盖这两种方法:

public Object getCellEditorValue()
{
    if (isPushed)
    {
        HistoryPanel.tableModel.removeRow(HistoryPanel.resultsTable.getSelectedRow());
    }
}

protected void fireEditingStopped()
{
    super.fireEditingStopped();
}

仅当我尝试删除resultsTable的最后一行时才会抛出异常。当我删除不是最后一行时,它完美地工作。例外是:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1 >= 1

导致异常的代码行是:

super.fireEditingStopped();

任何人都可以帮助我吗?如何避免此异常

2 个答案:

答案 0 :(得分:1)

目前,您在编辑操作期间删除了正在编辑的行。如果您发布了SSCCE,那么我可以更轻松地测试我提出的解决方案,但现在我会将其留给您。

我认为包装你的

if (isPushed)
{
    HistoryPanel.tableModel.removeRow(HistoryPanel.resultsTable.getSelectedRow());
}
EventQueue.invokeLater调用内的

可能会解决问题。这样,当您删除行时,编辑就完成了。

答案 1 :(得分:1)

为什么不直接使用Boolean值,为什么有Editor for JCheckBox,你必须查看教程how the JTable works

修改

for real TableCellEditor你必须致电

int row = table.convertRowIndexToModel(table.getEditingRow());
fireEditingStopped();

然后你可以要求删除