从AbstractTableModel获取列名

时间:2010-11-16 10:05:34

标签: java user-interface swing jtable abstracttablemodel

我无法使用构造函数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;        
        }
    }

我做错了,因为当我运行GUI时,我会得到标有 A ,* B *, C 的列名。

4 个答案:

答案 0 :(得分:15)

AbstractTableModel中没有名为getColumnNames的方法,所以我相信你的方法被忽略了。要覆盖的实际方法是getColumnName方法。

尝试将此方法添加到VolumeListTableModel类

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

答案 1 :(得分:4)

您需要覆盖getColumnName方法,在您的情况下只需

return columnNames[column];

答案 2 :(得分:3)

您必须覆盖此方法:

public String getColumnName(int column)

答案 3 :(得分:0)

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;

    }

    // [...]

}