JTable通过单击具有自定义DeleteCellEditor的单元格从相同的JTable中删除行
问题描述:
在名为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();
谁能帮助我?如何避免此异常
答
当前您在编辑操作期间删除正在编辑的行。如果你发布了一个SSCCE,这将会容易得多,所以我可以测试我提出的解决方案,但现在我将把它留给你。
我假设你的包裹
if (isPushed)
{
HistoryPanel.tableModel.removeRow(HistoryPanel.resultsTable.getSelectedRow());
}
内的EventQueue.invokeLater
通话可能会解决这个问题。这种方式编辑完成时,您删除该行。
答
真的,为什么不直接使用Boolean
价值,为什么会出现Editor for JCheckBox
,你必须检查教程how the JTable works
编辑
你必须调用
int row = table.convertRowIndexToModel(table.getEditingRow());
fireEditingStopped();
和thenafter你可以真正TableCellEditor
要求删除
谢谢!奇迹般有效! – 2012-03-28 23:10:47
@HristoValchevHristov再考虑[接受答案】(http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work),以便其他人可以看到这个问题已经解决 – Robin 2012-03-29 05:57:40