2012-11-01 70 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()); 
     } 
}