fireTableStructureChanged

fireTableStructureChanged

我做了一个自定义的AbstractTableModel。构造函数使用文件中的数据初始化模型。但是,我希望在模型中添加一个额外的列(这是由于其列中的SQL限制)。

我试图通过在初始化代码中添加对addColumn(String columnName,Vector columnData)方法的调用来实现这一点。

我的自定义AbstractTableModel中的addColumn方法是直接从DefaultTableModel的addColumn方法(包括“fireTableStructureChanged()”)派生的。

但是,当我运行此代码时,fireTableStructureChanged()似乎没有添加我的新列,而JTable仅显示文件中的数据。为什么会这样呢?

这是我正在使用的代码的简短说明:

public class Dummy extends AbstractTableModel {
    public Dummy() {
        //load data from SQL file into ResultSets
        //transfer ResultSet.metadata into columnHeaders Vector<String>
        //transfer ResultSet.data into columnDatums Vector<String>
        fireTableChanged(null);
        addColumn("Added Heading", (Vector)null);
    }

    public addColumn(String columnHeader, Vector columnData) {
         columnHeaders.add(columnHeader);
         // transfer columnData into columnDatums
         fireTableStructureChanged();
    }
 }

这是一个侦听器问题吗?此时没有人在监听fireTableStructureChanged()吗?

最佳答案

您必须揭露 TableModel AbstractTableModel接口指定的三个必需(即未实现)方法的实现。特别是,getColumnCount()getRowCount()必须返回更新后的值。 fireXxx()方法只是指示视图通过getValueAt()查询模型。数据必须在那里等待getValueAt()检索。 EnvTableTest 是一个简单的示例。另外,请考虑使用Vector的更现代的替代方法,它可能包含未编辑的同步代码。

09-15 16:53