簡體   English   中英

無法使用 AbstractTableModel 映射到數據庫向我的 JTable 添加一行

[英]Unable to add a row to my JTable with AbstractTableModel mapping to database

我有一個 JPA 實體,我試圖將其保存在 Derby 數據庫中並將該數據庫顯示給用戶。

目前我能夠做到這一點。 但是,我想在將數據庫添加到數據庫后立即為用戶更新數據庫,因為目前,該程序必須退出然后再次啟動以向用戶顯示更新后的 JTable。

我正在使用 AbstractTableModel 將我的數據庫表map 轉換為 View 中的 JTable 。

我相信問題出在我的 abstractTableModel 中的 setValueAt() 某處,但我真的不知道。

這是我的抽象表模型:

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 的 model。有點像。 我的意思是它接受 fileDoc 實體的結果列表並將該實體添加到結果列表。

您可以看到我如何在視圖中調用 JTable。

當用戶單擊 The View 中的添加按鈕時,它會將它們發送到The Controller中的事件處理程序(第 55 行)

然后在Model中,我從 AbstractTableModel 調用 addRow 方法。 我知道該方法已成功調用,但是沒有添加任何行供用戶查看。

TL;DR:用戶單擊添加按鈕,它轉到 controller,controller 打開 JFileChooser 到 select 一個文件,然后調用 searchmodel.addfile,它轉到 model,然后從它調用的 abstractTableModel 調用 addRow,然后什么也沒發生,我對自己做錯了什么感到困惑,需要幫助。

在 model 中,我創建了一個新的 DBModel 實例,而我本應該將它指向 OuterFrame.dbmodel,這是我需要更新的 JTable 所在的位置。

要解決我的具體問題,是刪除我之前在 model 中對 dbmodel 的初始化,然后在視圖中指向我的 dbmodel:

Model.java:13

OuterFrame.dbmodel.addRow(Document);

然后能夠向 JTable 添加一行,因為它指向正確的 model 而不是新創建的 dbmodel。

感謝/u/chickenmeister的協助,解決方案得以達成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM