Java:如何使fireTableStructureChanged更改AbstractTableModel?

Java:如何使fireTableStructureChanged更改AbstractTableModel?,java,swing,jtable,abstracttablemodel,Java,Swing,Jtable,Abstracttablemodel,我制作了一个定制的AbstractTableModel。构造函数使用文件中的数据初始化模型。但是,我希望向模型中添加一个额外的列(这是因为其列中存在SQL限制) 我试图通过在初始化代码中添加对addColumn(String columnName,Vector columnData)方法的调用来实现这一点 在我的自定义AbstractTableModel中,这个addColumn方法直接派生自DefaultTableModel的addColumn方法,包括“fireTableStructureC

我制作了一个定制的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();
    }
 }
公共类伪扩展AbstractTableModel{
公共假人(){
//将数据从SQL文件加载到结果集中
//将ResultSet.metadata传输到columnHeaders向量中
//将ResultSet.data传输到列数据向量
fireTableChanged(空);
addColumn(“添加的标题”,(向量)null);
}
公共addColumn(字符串列标题、向量列数据){
columnHeader.add(columnHeader);
//将columnData传输到columnDatums
firetablestructured();
}
}

这是一个侦听器问题吗?此时是否没有任何内容侦听fireTableStructureChanged()?

您必须展示中的
TableModel
接口指定的三个必需(即未实现)方法的实现。特别是,
getColumnCount()
getRowCount()
必须返回更新的值。
fireXxx()
方法只是指示视图通过
getValueAt()
查询模型。数据必须在那里等待
getValueAt()
检索。这是一个简单的例子。此外,考虑一个更现代的替代方案:代码>矢量< /代码>,它包括可能未同步的同步代码。

+ 1用于您的深思和深入的响应。我将回顾这些方法,并尝试以您建议的方式解决问题。如果成功的话,我会接受你的回答。如果我有困难,我会在问题后面加上代码。非常感谢你说得很对。我必须确保getColumnCount()和getRowCount()返回更新的值。谢谢你的回答和洞察力。不客气;很高兴它起作用了。作为参考,另请参阅。对于所有未来的读者-为了避免getValueAt()中的ArrayIndexOutOfBounds异常,我还必须采用DefaultTableModel的“justifyRows()”方法,并将我的columnData重构为对象向量向量,以使用justifyRows()。请学习java命名约定并坚持them@kleopatra-谢谢,但我认识他们。出于stackoverflow的目的,dummy只不过是一个丢弃的类名!这伤害了潜在帮手的眼睛:-)这不可能是你想要的…@kleopatra:真的!我已经修改了代码片段。感谢您的教训!