3

我制作了一个自定义的 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() 吗?

4

1 回答 1

4

必须揭示您对. _ 特别是,必须返回更新后的值。这些方法只是指示视图通过 查询模型。数据必须在那里等待检索。是一个简单的例子。此外,考虑一个更现代的替代方案,其中包括可能不需要的同步代码。TableModelAbstractTableModelgetColumnCount()getRowCount()fireXxx()getValueAt()getValueAt()EnvTableTestVector

于 2012-04-04T02:32:32.667 回答