2010-11-16 217 views
5

我找不出使用構造函數JTable(TableModel dm)的東西。從AbstractTableModel獲取列名稱

我使用一個LinkedList來管理我的數據,因此,以顯示它,我延長AbstractTableModel

public class VolumeListTableModel extends AbstractTableModel { 

    private static final long serialVersionUID = 1L; 
    private LinkedList<Directory> datalist; 
    private Object[] columnNames= {"ID", "Directory", "Wildcard"}; 


    public VolumeListTableModel(){ 
    } 

    public void setDatalist(LinkedList<Directory> temp){ 
     this.datalist = temp; 
    } 

    public LinkedList<Directory> getDatalist(){ 
     return (LinkedList<Directory>) this.datalist.clone(); 
    } 

    public Object[] getColumnNames() { 
     return this.columnNames;  
    } 

    @Override 
    public int getColumnCount() { 
     return Directory.numCols; 
    } 

    @Override 
    public int getRowCount() { 
     return this.datalist.size(); 
    } 

    @Override 
    public Object getValueAt(int row, int col) { 

     Directory temp = this.datalist.get(row); 

     switch(col){ 
     case 0: 
      return temp.getId(); 
     case 1: 
      return temp.getPath(); 
     case 2: 
      return temp.getWildcard(); 
     default: 
      return null;   
     } 
    } 

我做錯了什麼,因爲當我跑我的GUI我得到的列名標記,* B *,C

回答

15

AbstractTableModel中沒有名爲getColumnNames的方法,所以我相信您的方法被忽略。您想要覆蓋的實際方法是getColumnName方法。

嘗試增加這個方法將你VolumeListTableModel類

public String getColumnName(int column) { 
    return columnNames[column]; 
} 
+0

謝謝大家。由於響應時間,我給出了Codemwnci的答案。 – dierre 2010-11-16 10:23:05

4

你需要重寫getColumnName方法,你的情況會簡單

return columnNames[column]; 
+0

Ach太慢了。 Codemwnci有一個更快和更清晰的答案。 – Jim 2010-11-16 10:13:33

3

你必須重寫此方法:

public String getColumnName(int column) 
0

AbstractTable型號沒有一個getColumnNames方法,但它很容易實現:

public class VolumeListTableModel extends AbstractTableModel { 

    // [...] 

    public String[] getColumnNames() { 

     String[] columnNames = new String[this.getColumnCount()]; 

     for (int i = 0, columnCount = this.getColumnCount(); i < columnCount; i++) {  
      columnNames[i] = this.getColumnName(i); 
     } 

     return columnNames; 

    } 

    // [...] 

}