在一个名为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();
任何人都可以帮助我吗?如何避免此异常
答案 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();
然后你可以要求删除