2010-11-16 4 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

4

Вам необходимо переопределить метод getColumnName в вашем случае будет просто

return columnNames[column]; 
+0

Ах слишком медленно. Codemwnci имеет более быстрый и понятный ответ. – Jim

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; 

    } 

    // [...] 

}