У меня есть объект JPA, который я пытаюсь сохранить в базе данных Derby и отображаю эту базу данных для пользователя.
В настоящее время я могу это сделать. Однако я хотел бы обновить базу данных для пользователя, как только она будет добавлена в базу данных, как в настоящее время. Программа должна выйти, а затем снова запуститься, чтобы показать пользователю обновленную таблицу JTable.
I Я использую AbstractTableModel для сопоставления моей таблицы базы данных с JTable в представлении .
. Я считаю, что проблема лежит где-то в setValueAt () в моем abstractTableModel, но я действительно не знаю.
Вот мой 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. Вроде. Я имею в виду, что он берет в resultList прав доступа fileDo c и добавляет объект в resultList.
Вы можете увидеть, как я вызываю JTable в Представлении .
Когда пользователь нажимает кнопку добавления в представлении, он отправляет их обработчику событий в Контроллере (строка 55)
Затем в Модель Я вызываю метод addRow из AbstractTableModel. Я знаю, что метод вызывается успешно, однако для пользователя не добавляется ни одной строки.
TL; DR: пользователь нажимает кнопку добавления, он переходит к контроллеру, контроллер открывает JFileChooser, чтобы выбрать файл , затем вызывает searchmodel.addfile, который идет к модели, а затем вызывает addRow из abstractTableModel, который он вызывает, и тогда ничего не происходит, и я запутался в том, что я делаю неправильно, и мне нужна помощь.