Получение имен столбцов из AbstractTableModel - PullRequest
5 голосов
/ 16 ноября 2010

Я не могу что-то понять, используя конструктор JTable(TableModel dm).

Я использую 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;        
        }
    }

Я делаю что-то не так, потому что когда я запускаю свой графический интерфейс, яполучить имена столбцов с пометкой A , * B *, C .

Ответы [ 4 ]

15 голосов
/ 16 ноября 2010

В AbstractTableModel нет метода с именем getColumnNames, поэтому я считаю, что ваш метод игнорируется. Фактический метод, который вы хотите переопределить, - это метод getColumnName.

Попробуйте добавить этот метод в свой класс VolumeListTableModel

public String getColumnName(int column) {
    return columnNames[column];
}
4 голосов
/ 16 ноября 2010

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

return columnNames[column];
3 голосов
/ 16 ноября 2010

Вы должны переопределить этот метод:

public String getColumnName(int column)
0 голосов
/ 14 июня 2013

AbstractTableModel не имеет метода 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;

    }

    // [...]

}
...