【问题标题】:Get the row in JTable that got changed/added or deleted获取 JTable 中更改/添加或删除的行
【发布时间】:2014-05-15 18:51:37
【问题描述】:

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

是否有一个监听器来获取被更改的行?获取整个表格,检查哪个条目不同等太复杂了。

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

【问题讨论】:

  • 您是否尝试过在JTable 中添加或删除数据?
  • @Patrick 我编辑了我的帖子。好吧,我需要更改文件中的行,所以我需要以某种方式获取它们...
  • 请显示一些代码,您有自己的 TableModel 或者您以何种方式将数据添加到您的 JTable。一些代码将有助于为您找到解决方案。

标签: java swing jtable


【解决方案1】:

实现这一目标的最简单方法是实现您自己的 TableModel 并覆盖 fire...()-Methods。

类似这样的:

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
}

【讨论】:

  • 理论上正确答案 +1,但 OP 提到 FileIO,Swing 中的 EDT/Concurency 可能存在问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-21
  • 2012-06-04
  • 2014-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-17
相关资源
最近更新 更多