2012-11-01 83 views
3

我已經看到了我的問題問了幾次,但我從來沒有看到我所期望的答案。 我已經進入JTable中數據庫的內容,我希望能夠刪除/通過一些Jbutton將添加元素。 問題是,當我添加/刪除時,修改在數據庫中可見,但在JTable中不可見。當我停止程序並再次運行時,JTable被更新。 如何在修改行後立即更新表格?我試過做this.table.repaint(),但沒有奏效。我想我必須對錶格模型做些什麼,可能是fireTableStructureChanged();,但我並不清楚如何使用它 非常感謝您的時間。更新的JTable

這裏是我的控制器類JTable中的部分代碼,我不認爲這會幫助..

public void update(Observable o, Object message) { 
    Integer iMessage = (Integer) message; 

    if (iMessage == Cours.CHANGEMENT_ELEVES) { 
     int sizeEl = this.modele.getAllEleves().size(); 

     if (this.modele.getAllEleves() !=null) { 
      Vector<String[]> data = this.modele.getAllEleves(); 

      for (int i=0; i<sizeEl; i++) { 
       this.table.setValueAt(data.get(i)[0],i, 0); 
       this.table.setValueAt(data.get(i)[1],i,1); 
       this.table.setValueAt(data.get(i)[2],i,2); 
     } 
     this.table.repaint(); 
    } 
    } 
} 

回答

0

當你想要同步的JTable與數據庫請添加以下代碼。

 // Here Add Your Data Fetch Code From DataBase 
     For e.g. 
     Vector<Object> objVect_Dt = util.GetQueryResultSet(query); 
     Vector<Vector<String>> data = (Vector<Vector<String>>) objVect_Dt.get(1); 
     Vector<String> header = (Vector<String>) objVect_Dt.get(0); 

取出由數據庫更新表格模型中的數據作爲

 DefaultTableModel dtm = new DefaultTableModel(data, header); 
     Table.setModel(dtm); 
     table.repaint(); 
0

它不是一個重繪或重新驗證JTable中的問題後。 當您添加行或從表模型中刪除行時,您必須觸發事件fireTableRowInserted even或tableDatachangeEvent。 下面的代碼示例:

class myModel extends AbstractTableModel 
{ 
//// 
//// 
//// 
//// 
//// 
     // Remove Row from table Model 
     public void removeRow(int row) { 
      data.removeElementAt(row); 
      fireTableRowsDeleted(getRowCount(), getRowCount()); 
     } 

     // Add new row to table 
     public void addRow(Vector row) { 
      data.addElement(row); 
      fireTableRowsInserted(0, getRowCount()); 
     } 
}