gpt4 book ai didi

java - 无法通过映射到数据库的AbstractTableModel向我的JTable添加行

转载 作者:行者123 更新时间:2023-12-02 09:46:19 26 4
gpt4 key购买 nike

我有一个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。

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

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

TL; DR:
用户单击添加按钮,它转到 Controller , Controller 打开JFileChooser来选择一个文件,然后调用转到模型的searchmodel.addfile,然后从abstractTableModel调用它调用的addRow,然后什么也没有发生,我我对自己做错了什么感到困惑,需要帮助。

最佳答案

在模型中,当我应该将它指向OuterFrame.dbmodel时,我正在创建一个新的DBModel实例,在该实例中我需要更新JTable。

要解决我的特定问题,它是删除模型中以前对dbmodel的初始化,然后在 View 中指向我的dbmodel:

型号.java:13

OuterFrame.dbmodel.addRow(Document);

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

/u/chickenmeister的帮助下,解决方案得以实现。

关于java - 无法通过映射到数据库的AbstractTableModel向我的JTable添加行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61201676/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com