Java 获取JTable中已更改/添加或删除的行

Java 获取JTable中已更改/添加或删除的行,java,swing,jtable,Java,Swing,Jtable,每当JTable上的某些内容发生更改(一行被删除、更改或添加)时,我就有一个JTable,我需要将其保存在一个文件中 是否有一个侦听器只获取更改的行?获取整个表、检查哪个条目不同等都太复杂了 编辑:数据已经在表中,我需要找出哪些数据被更改了,因为我以后会使用它…实现这一点最简单的方法是实现您自己的表模型并覆盖fire…()-方法 大概是这样的: import javax.swing.table.DefaultTableModel; public class MyTableModel exten

每当JTable上的某些内容发生更改(一行被删除、更改或添加)时,我就有一个JTable,我需要将其保存在一个文件中

是否有一个侦听器只获取更改的行?获取整个表、检查哪个条目不同等都太复杂了


编辑:数据已经在表中,我需要找出哪些数据被更改了,因为我以后会使用它…

实现这一点最简单的方法是实现您自己的表模型并覆盖fire…()-方法

大概是这样的:

import javax.swing.table.DefaultTableModel;

public class MyTableModel extends DefaultTableModel {

    @Override
    public void fireTableCellUpdated(int row, int column) {
        super.fireTableCellUpdated(row, column);
        //call your event
    }

    @Override
    public void fireTableRowsDeleted(int firstRow, int lastRow) {
        super.fireTableRowsDeleted(firstRow, lastRow);
        //call your event
    }

    @Override
    public void fireTableRowsInserted(int firstRow, int lastRow) {
        super.fireTableRowsInserted(firstRow, lastRow);
        //call your event
    }

    @Override
    public void fireTableRowsUpdated(int firstRow, int lastRow) {
        super.fireTableRowsUpdated(firstRow, lastRow);
        //call your event
    }

    @Override
    public void fireTableDataChanged() {
        super.fireTableDataChanged();
        //call your event
    }

    @Override
    public void fireTableStructureChanged() {
        super.fireTableStructureChanged();
        //call your event
    }
}
您可以覆盖DefaultTableModel中的每个方法,甚至是删除行的方法。因此,您可以在删除它们之前保存它们

@Override
public void removeRow(int row) {
    //save the row
    super.removeRow(row); // this deletes it
}

您是否尝试过从
JTable
中添加或删除数据?@Patrick我编辑了我的帖子。嗯,我需要更改文件中的行,所以我需要以某种方式获取它们…请显示一些代码,您有自己的TableModel,或者以何种方式将数据添加到JTable。一些代码可能有助于为您找到解决方案。理论上正确答案+1,但OP提到FileIO,Swing中的EDT/Concurence可能存在问题