2013-05-30 160 views
0

在插入或刪除抽象表模型中的項目之後,我試圖更新表格,但每當我這樣做時,不是刪除舊記錄,而是用新的記錄替換舊行仍然存在,它再次創造的所有行,而不刪除舊的ones..so我得到重複的項目,這是一個使用IM代碼:插入 的數據:使用AbstractTableModel從JTable刪除或添加行

TestModel tm = new TestModel() ; 

        tm.fireTableRowsInserted(records.length, records.length); 

和數據刪除:

TestModel tm = new TestModel() ; 
        tm.fireTableRowsDeleted(records.length, records.length); 

任何線索如何解決這個問題? 任何幫助,非常感謝! 親切的問候, Romulo Romero

+0

使用DefaultTableModel。它支持從模型中動態添加/刪除行的方法。 – camickr

+0

你不應該在模式之外「發射」事件,它們只能從模型中被觸發。 API描述了這些事件的要求,因爲數據必須已經從模型中刪除/插入。它讓我害怕你的例子以'new TestModel();'開頭。只有附加到表格的模型應該更新,只有它會通知更新表格。 [SSCCE](http://sscce.org/)可能會產生更好的答案 – MadProgrammer

回答

1

創建一個帶有布爾列的表。由於使用此布爾列,您可以刪除選定要刪除的行。就像下面的屏幕截圖,

enter image description here

然後在你TableModel做出List<StudentDO>使得其將持有的所有表數據。

添加一行:

要添加行只需要創建一個新的StudentDO並將其發送到表模型和模型addRow方法將對象添加到表列表。

刪除行:

刪除行只是調用刪除方法,這應該在TableModel火災事件,使得模型應該遍歷所有的行,並檢查其有史以來行被選中並刪除它。

注意:刪除行應該從結尾開始,而不是從列表開始。

StudentTableModel.java

class StudentTableModel { 

    // Required methods code goes here. 

    public void addRow(StudentDO do1) { 
     data.add(do1); 
     fireTableRowsInserted(getRowCount() - 1, getRowCount() - 1); 
    } 

    public void deleteRow() { 
      for(int rowIndex = data.size() - 1; rowIndex >= 0; rowIndex--) { 
      if(data.get(rowIndex).isSelect()) { 
      data.remove(rowIndex); 
     } 
      } 
    fireTableDataChanged(); 
    } 
} 

P.S:fireXXXMethods只能調用模型。因爲任何數據更改都將對模型負責。

相關問題