2010-11-16 3 views
5

Non riesco a capire qualcosa usando il costruttore JTable(TableModel dm).Ottenere i nomi di colonna da un AbstractTableModel

sto usando un LinkedList per gestire i miei dati in modo, per visualizzarlo, ho esteso 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;   
     } 
    } 

che sto facendo qualcosa di sbagliato, perché quando eseguo il mio GUI ottengo i nomi delle colonne etichettate A, * B *, C.

risposta

15

Non esiste alcun metodo in AbstractTableModel chiamato getColumnNames, quindi credo che il metodo venga ignorato. Il metodo effettivo che si desidera sovrascrivere è il metodo getColumnName.

Prova ad aggiungere questo metodo per la classe VolumeListTableModel

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

Grazie a tutti. Sto dando la risposta a Codemwnci a causa del tempo di risposta. – dierre

4

È necessario eseguire l'override del metodo getColumnName che nel tuo caso sarà sufficiente

return columnNames[column]; 
+0

Ach troppo lento. Codemwnci ha una risposta più rapida e chiara. – Jim

3

Dovete override questo metodo:

public String getColumnName(int column) 
0

AbstractTable Modello non dispone di un getColumnNames metodo, ma è facile da implementare:

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; 

    } 

    // [...] 

}