AbstractTableModel类如何在Java中正常工作?

时间:2016-03-09 09:13:42

标签: java swing abstracttablemodel

我有一个swing应用程序,我主要有一个Jtree和一个JTable。当应用程序启动时,树会显示一个值列表,并且该表仅显示其列名。一旦从树中选择了一个节点,就需要在表中显示与所选节点相关的一些数据。 我有一个Table模型类,它扩展了AbstractTableModel,如下所示

import javax.swing.table.AbstractTableModel;
import java.util.List;

public class PropertiesTableModel extends AbstractTableModel{
    private List<Field> fieldList;
    private final static String[] columnNames= new String[]{"Field","Value"};

    public PropertiesTableModel(List<Field> list){
        this.fieldList=list;
    }

    @Override
    public String getColumnName(int columnIndex){
        return columnNames[columnIndex];
    }

    @Override
    public int getRowCount() {
        return fieldList.size();
    }

    @Override
    public int getColumnCount() {
        return 2;
    }

    //this method is called to set the value of each cell
    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        Field field= (Field) fieldList.get(rowIndex);

            switch(columnIndex){
                case 0:
                    return field.getFieldDef().getfName();
                case 1:
                    return field.getDefaultValue();
            }
            return null;
    }
    @Override
    public Class<?> getColumnClass(int columnIndex){
        switch (columnIndex){
            case 0:
                return String.class;
            case 1:
                return Object.class;
        }
        return null;
    }

}

从另一个类我使用这个表模型如下

    public void populateTableData(List<Field> list){
      this.fieldList=list;
      JTable propertiesTable=new JTable();
      propertiesTable.setModel(new PropertiesTableModel(fieldList));
    }

当我运行应用程序并从树中选择一个节点时,表中没有填充预期的数据。我确保将fieldList数据传递给TableModel,但只调用getColumnName()和getColumnCount()方法。

我想知道我的代码中是否缺少某些内容。

1 个答案:

答案 0 :(得分:2)

如果基础数据在模型中发生变化(使用fireTableDataChanged),你可能忘记包含需要触发视图(JTable)从模型更新自身这一事实......我假设你的列表最初是空的数据被添加到列表中,并且dats不会显示在JTable中。

我可以建议你去看看GlazedLists! (http://www.glazedlists.com/

这个免费软件库非常适合您的需求!