2014-05-15 72 views
0

我有一個JTable當JTable上的某些內容發生更改(一行被刪除,更改或添加)時,我需要將其保存在文件中。獲取更改/添加或刪除的JTable中的行

是否有一個監聽器來獲取只是被更改的行?它的方法太複雜,以獲得整個表,檢查哪個條目是不同等

編輯:數據已經在表中,我需要找出哪些數據得到了改變,因爲我以後使用它...

+0

您是否嘗試過在JTable中添加或刪除數據? – Patrick

+0

@Patrick我編輯了我的帖子。那麼,我需要改變文件中的行,所以我需要讓它們以某種方式得到它們... – user3549340

+0

請顯示一些代碼,您有自己的TableModel或以何種方式將數據添加到您的JTable。一些代碼將有助於爲您找到解決方案。 – Patrick

回答

2

最簡單的方法就是實現你自己的TableModel並重寫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 
} 
+0

理論上正確的答案+1,但是OP提到了FileIO,在擺動中EDT/Concurency可能存在問題 – mKorbel

相關問題