[英]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.