【发布时间】:2020-04-14 06:12:47
【问题描述】:
我有一个 JPA 实体,我正尝试将它保存在 Derby 数据库中并将该数据库显示给用户。
目前我能够做到这一点。但是,我想在将数据库添加到数据库后立即为用户更新数据库,目前,程序必须退出然后重新启动以向用户显示更新的 JTable。
我正在使用 AbstractTableModel 将我的数据库表映射到 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 实体的 resultList 并将实体添加到 resultList。
您可以在The View 中看到我是如何调用JTable 的。
当用户点击视图中的添加按钮时,它会将它们发送到The Controller 中的事件处理程序(第 55 行)
然后在The Model 中,我从AbstractTableModel 中调用addRow 方法。我知道该方法已成功调用,但没有添加任何行供用户查看。
TL;DR: 用户单击添加按钮,它进入控制器,控制器打开 JFileChooser 以选择一个文件,然后调用 searchmodel.addfile 进入模型,然后从它调用的 abstractTableModel 调用 addRow,然后什么也没有发生,我我对自己做错了什么感到困惑,需要帮助。
【问题讨论】:
标签: java database swing jtable derby