无法使用 AbstractTableModel 映射到数据库向我的 JTable 添加行

Unable to add a row to my JTable with AbstractTableModel mapping to database

我有一个 JPA 实体,我试图将其保存在 Derby 数据库中并将该数据库显示给用户。

目前我可以做到。但是,我想在将数据库添加到数据库后立即为用户更新数据库,因为目前,程序必须退出然后再次启动才能向用户显示更新的 JTable。

我正在使用 AbstractTableModel 将我的数据库 table 映射到 JTable in the View

我认为问题出在我的 abstractTableModel 中的 setValueAt() 中,但我真的不知道。

这是我的 AbstractTableModel:

public class DBModel extends AbstractTableModel {
    private Model SearchModel;
    private List<FileDoc> results;
    enum Col {ID, NAME, EXISTENCE, MODIFIED}

    public DBModel(){
    SearchModel = new Model();
    List<FileDoc> results = SearchModel.getFile();
    this.results = results;
    }

@Override
public int getColumnCount(){return Col.values().length;}
@Override
public int getRowCount(){return results.size();}
@Override
public Object getValueAt(int row,int col){
    Col column = Col.values()[col];
    FileDoc filedoc = results.get(row);
    switch(column) {
        case ID:        return filedoc.getFileID();
        case NAME:      return filedoc.getFileName();
        case EXISTENCE: return filedoc.isExistence();
        case MODIFIED:  return filedoc.getModified();
    }
return FileDoc.class;
}
@Override
public String getColumnName(int col){
    Col column = Col.values()[col];
    return column.toString();
}

public void addRow(FileDoc filedoc) {
    results.add(filedoc);
    fireTableRowsInserted(results.size()-1, results.size()-1);
    fireTableDataChanged();
}

@Override
public void setValueAt(Object value, int row, int col){
    Col column = Col.values()[col];
    FileDoc filedoc = results.get(row);
    switch(column) {
        case ID:        filedoc.setFileID((Integer)value);
        case NAME:      filedoc.setFileName((String)value);
        case EXISTENCE: filedoc.setExistence((Boolean)value);
        case MODIFIED:  filedoc.setModified((Date)value);
    }
    fireTableCellUpdated(row,col);
}}

等等。这是将数据库映射到 Jtable 的模型。有点儿。我的意思是它接受 fileDoc 实体的结果列表并将该实体添加到结果列表。

您可以在 The View 中看到我如何调用 JTable。

当用户单击视图中的添加按钮时,它会将它们发送到 The Controller 中的事件处理程序(第 55 行)

然后在 The Model 中,我从 AbstractTableModel 调用 addRow 方法。我知道该方法已成功调用,但是没有添加任何行供用户查看。

长话短说: 用户单击添加按钮,它转到控制器,控制器打开 JFileChooser 到 select 一个文件,然后调用 searchmodel.addfile 转到模型,然后从它调用的 abstractTableModel 调用 addRow,然后什么也没发生,我对自己做错了什么感到困惑,需要帮助。

在模型中,我创建了一个新的 DBModel 实例,而我本应将其指向 OuterFrame.dbmodel,这是我需要更新的 JTable 所在的位置。

要解决我的具体问题,是删除我之前在模型中对 dbmodel 的初始化,然后在视图中指向我的 dbmodel:

Model.java:13

OuterFrame.dbmodel.addRow(Document);

然后可以向 JTable 添加一行,因为它指向正确的模型而不是新创建的 dbmodel。

/u/chickenmeister 的帮助下得到解决。