2010-11-16 5 views
5

Je n'arrive pas à comprendre quelque chose en utilisant le constructeur JTable(TableModel dm).Obtention de noms de colonnes à partir d'un AbstractTableModel

J'utilise une LinkedList pour gérer mes données afin, pour l'afficher, j'étendu 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;   
     } 
    } 

que je fais quelque chose de mal parce que quand je lance mon GUI je reçois les noms de colonnes étiquetés A, * B *, C.

Répondre

15

Il n'y a pas de méthode dans AbstractTableModel appelée getColumnNames, donc je crois que votre méthode est ignorée. La méthode que vous voulez remplacer est la méthode getColumnName.

Essayez d'ajouter cette méthode à votre classe VolumeListTableModel

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

Merci tout le monde. Je donne la réponse à Codemwnci en raison du temps de réponse. – dierre

4

Vous devez remplacer la méthode getColumnName qui dans votre cas sera simplement

return columnNames[column]; 
+0

Ach trop lent. Codemwnci a une réponse plus rapide et plus claire. – Jim

3

Vous devez remplacer cette méthode:

public String getColumnName(int column) 
0

RésuméTable Modèle n'a pas de getColumnNames méthode, mais il est facile à mettre en œuvre:

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; 

    } 

    // [...] 

} 
Questions connexes