2013-05-13 143 views
2

由於某種原因,調用此JTable時此變化無關(此方法在用戶提交SQL查詢後更新JTable)。JTable未更新數據

Givens: dataVector和columnNamesVector被驗證爲正確填充。 JTable是一個私有類變量。

private void updateData() { 
    updateDataVariables(); 
    table = new JTable(dataVector, columnNamesVector) 
    { 
     @SuppressWarnings({ "unchecked", "rawtypes" }) 
     public Class getColumnClass(int column) 
     { 
      for (int row = 0; row < getRowCount(); row++) 
      { 
       Object o = getValueAt(row, column); 

       if (o != null) 
       { 
        return o.getClass(); 
       } 
      } 

      return Object.class; 
     } 
    }; 
} 

任何想法?

回答

4

這是一個常見的初學者的謬誤混淆對象與參考變量,但你需要明白,他們是非常不同的。當調用此:

table = new JTable(dataVector, columnNamesVector) {..... 

您正在創建一個新的JTable對象,並具有表變量引用它,但這有一個由GUI,一個顯示JTable中對象沒有影響該表變量在之前提到過。所以你改變了引用變量的屬性,但保持原始對象不變。

解決方案:您不應該創建新的JTable,而應該創建一個新的TableModel,然後將該TableModel放入現有的可視化JTable中。您可以通過撥打setModel(newModel)來更改表格的模型。

編輯:或者wolfcastle指出你可以更新現有的TableModel,而不是重新創建一個。

+2

或只是更新你的模型,而不是創建一個新的每 – wolfcastle 2013-05-13 01:49:22

+0

是時間,但我如何去了解我的dataVector中和columnNamesVector轉換成的TableModel和ColumnNamesModel分別?這是我擁有數據的唯一格式。有什麼方法可以將其轉換? – 2013-05-13 01:49:26

+0

@JoeBabcock:檢查DefaultTableModel API,因爲它可能具有您需要的構造函數和方法。 – 2013-05-13 01:50:02

2

您需要告訴JTable模型中的數據已更新並觸發了適當的事件。

看到這個tutorial

+0

由於原始的JTable(GUI中顯示的JTable不受影響),這將無濟於事。 – 2013-05-13 01:47:51