2011-02-09 88 views
0

更新表GUI我創建了一個使用下面的語法顯示錶一個Java GUI:擴展定製AbstractTableModel上

table = new JTable(new MyTableModel(columnNames, 
            updateTable(cmbAdversary.getSelectedItem().toString(), 
               cmbdataType.getSelectedItem().toString()))); 

其中COLUMNNAMES是字符串 cmbadversary和smbdataType的載體是選擇OD組合框。

和updateTable是向量的向量取決於組合框中選擇如下返回的方法:

static Vector updateTable(String FilterVal1 , String FilterVal2) 
{ 
try { 
    myVector = tssc.testSeverityFunctionService(FilterVal1,FilterVal2); 
} catch (Exception e) { 
e.printStackTrace();} 
return myVector; 
} 

這是我的一個擴展AbstractTableModel的定製類MyTableModel的樣子:

class MyTableModel extends AbstractTableModel 
{ 
    Vector columnNames = new Vector(); 
    Vector Fdb = new Vector(); 

    public MyTableModel(Vector cName,Vector rName){ 
     this.columnNames = cName; 
     this.Fdb = rName;} 
    public int getColumnCount() { // number of columns in the model. 
     return columnNames.size(); 
    } 
    public int getRowCount() { // number of rows in the model. 
     return Fdb.size(); 
    } 
    @Override 
    public String getColumnName(int col) { 
     return columnNames.get(col).toString(); 
    } 
    public Object getValueAt(int row, int col) { 
     Vector v = (Vector) this.Fdb.get(row); 
     return v.get(col); 
    } 
    @Override 
    public Class getColumnClass(int c) { 
     Vector v = (Vector) Fdb.get(0); 
     return v.get(c).getClass();} 

    public boolean isCellEditable(int row, int col) 
    {  return true; } 

    public void setValueAt(Vector value, int row, int col) 
    { 
     for(int i=0;i<value.size();i++) 
     { for(int j=0;j<columnNames.size();j++) { 
        Fdb.setElementAt(value.get(j),j); } 
     } 
     fireTableCellUpdated(row, col); 
    } 

} 

問題是,當我運行代碼時,表格GUI向我顯示初始值,但在更改2個組合框中的選擇並單擊選擇按鈕時無法更新。 「選擇」按鈕btw調用實現動作偵聽器的方法。

請幫我一把。我不喜歡Java,但願意學習。如果您有任何後續服務,我會很樂意提供詳細信息。

+0

那麼,你的ActionListener-Method是什麼?它是否簡單地調用`updateTable()`,但是對結果沒有任何作用? – 2011-02-09 14:05:52

回答

1

您的解決方案看起來過於複雜。如果我瞭解基本知識,用戶將從組合框中選擇一個值,然後根據選擇將一些數據加載到表中。

有沒有必要創建一個自定義表模型來做到這一點。

TableModel包含數據。如果你想改變數據,那麼一種方法是簡單地創建一個新的TableModel。所以你添加一個ActionListener到你的組合框。選擇某個項目時,可以回顧數據並將數據加載到Vector或Array中。使用這個數據,您可以在兩行代碼創建一個新的TableModel和更新的JTable:

DefaultTableModel model = new DefaultTableModel(...); 
table.setModel(model); 

如果您需要自定義模型覆蓋的getColumnClass()或的isCellEditable()方法,那麼你應該延長的DefaultTableModel。我認爲沒有必要實施整個模式。

+0

謝謝。你的方法就是我最終遵循的方法,它對我有用。 – Nir 2011-02-15 17:27:48