Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JTable通过单击同一JTable中具有自定义DeleteCellEditor的单元格来删除行_Java_Swing_Jtable - Fatal编程技术网

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有
编辑器,您必须检查教程

编辑

对于real
TableCellEditor
,您必须调用

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

然后你可以打电话要求删除

谢谢!工作起来很有魅力@HristoValchevHristov于是考虑让别人看到这个问题就解决了。