2012-03-28 60 views
0

在名为HistoryPanel的类中,我有一个名为resultsTable的静态JTable,其中包含一个名为tableModel的静态DefaultTableModel。该表具有自定义单元格编辑:JTable通过单击具有自定义DeleteCellEditor的单元格从相同的JTable中删除行

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(); 

谁能帮助我?如何避免此异常

回答

1

当前您在编辑操作期间删除正在编辑的行。如果你发布了一个SSCCE,这将会容易得多,所以我可以测试我提出的解决方案,但现在我将把它留给你。

我假设你的包裹

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

内的EventQueue.invokeLater通话可能会解决这个问题。这种方式编辑完成时,您删除该行。

+0

谢谢!奇迹般有效! – 2012-03-28 23:10:47

+0

@HristoValchevHristov再考虑[接受答案】(http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work),以便其他人可以看到这个问题已经解决 – Robin 2012-03-29 05:57:40

1

真的,为什么不直接使用Boolean价值,为什么会出现Editor for JCheckBox,你必须检查教程how the JTable works

编辑

你必须调用

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

和thenafter你可以真正TableCellEditor要求删除