2010-11-16 15 views
5

No puedo entender algo usando el constructor JTable(TableModel dm).Obteniendo los nombres de columna de un AbstractTableModel

estoy usando un LinkedList para gestionar mis datos de modo, para mostrarla, extendí 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 estoy haciendo algo mal, porque cuando corro mi GUI consigo nombres de las columnas etiquetadas A , * B *, C.

Respuesta

15

No hay ningún método en AbstractTableModel llamado getColumnNames, así que creo que su método está siendo ignorado. El método real que desea sobrescribir es el método getColumnName.

Trate de añadir este método a la clase VolumeListTableModel

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

Gracias a todo el mundo. Estoy dando la respuesta a Codemwnci debido al tiempo de respuesta. – dierre

4

Es necesario reemplazar el método getColumnName que en su caso simplemente se

return columnNames[column]; 
+0

Ach demasiado lento. Codemwnci tiene una respuesta más rápida y clara. – Jim

3

Tienes que reemplazar este método:

public String getColumnName(int column) 
0

AbstractTable Modelo no tiene un getColumnNames método, pero es fácil de implementar:

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; 

    } 

    // [...] 

} 
Cuestiones relacionadas