Java JTable通过单击同一JTable中具有自定义DeleteCellEditor的单元格来删除行
在名为Java JTable通过单击同一JTable中具有自定义DeleteCellEditor的单元格来删除行,java,swing,jtable,Java,Swing,Jtable,在名为HistoryPanel的类中,我有一个名为resultsTable的静态JTable,其中有一个名为tableModel的静态DefaultTableModel。该表具有自定义单元格编辑器: resultsTable.getColumn("Delete").setCellEditor(new DeleteButtonEditor(new JCheckBox())); 在内部,我自然会像这样覆盖这两种方法: public Object getCellEditorValue() {
HistoryPanel
的类中,我有一个名为resultsTable
的静态JTable,其中有一个名为tableModel
的静态DefaultTableModel。该表具有自定义单元格编辑器:
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();
导致异常的代码行是:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1 >= 1
super.fireEditingStopped();
有人能帮我吗?如何避免此异常当前,在编辑操作期间删除正在编辑的行。如果你发布了一个测试,我就可以测试我提出的解决方案,这会容易得多,但现在我将把这留给你 我想包装你的
if (isPushed)
{
HistoryPanel.tableModel.removeRow(HistoryPanel.resultsTable.getSelectedRow());
}
在
EventQueue.invokeLater
调用中,可以解决此问题。这样,删除行时编辑就完成了。真的为什么不直接使用布尔值,为什么JCheckBox有编辑器,您必须检查教程
编辑
对于realTableCellEditor
,您必须调用
int row = table.convertRowIndexToModel(table.getEditingRow());
fireEditingStopped();
然后你可以打电话要求删除谢谢!工作起来很有魅力@HristoValchevHristov于是考虑让别人看到这个问题就解决了。