目前我有一个应用程序允许我在 Jtable 中显示数据,然后当我双击 Jtable 时,它会打开一个小窗口,仅编辑 3 个字段、评论、到期日期和描述。我更新了这个值(whit a preparedStatement
),事情是每次我对数据库进行更新时,我的表都会自行刷新,用我刚刚插入另一个窗口但格式不同的新值更改 dateFormat !. 这怎么可能?
我不明白这一点,因为当我按下包含以下代码的“搜索”按钮时,我只为表格设置了一个模型:
ArrayList<FiltrosResumen> filtrosResumenList = MainFrame.dataBase.searchFiltroResumen(query);
FiltrosResumenTableModel resumenModel = new FiltrosResumenTableModel(filtrosResumenList);
this.resumenTable.setModel(resumenModel);
hideColumns(1);
我正在使用包含所有表字段的自定义表模型,所以首先如您所见,我将数据库中的所有行从自定义对象“ FiltrosResumen
”中收集到 ArrayList 中,然后我将其从我的 customTable 模型传递给构造函数FiltrosResumenTableModel
" 这扩展AbstractTableMode
了我没有使用任何特殊的渲染最重要的方法是
public Object getValueAt(int rowIndex, int columnIndex) {
switch (columnIndex) {
case 0:
return this.filtrosResumen.get(rowIndex).getIdFiltro();
//....
//case 9:
default:
return null;
}
}
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
FiltrosResumen filtroResumen = new FiltrosResumen();
switch (columnIndex) {
case 0:
filtroResumen = this.filtrosResumen.get(rowIndex);
filtroResumen.setIdFiltro(Long.parseLong(aValue.toString()));
this.fireTableCellUpdated(rowIndex, columnIndex);
break;}
//....
//case 9:
}
和构造函数
public FiltrosResumenTableModel(List<FiltrosResumen> filtrosResumen) {
this.filtrosResumen = filtrosResumen;
}
正如我之前所说,数据库不会直接与表交互,因为将查询结果存储在 ArrayList 中,然后将其发送到我的 customTableModel 的构造函数。
编辑:为了更改其中一个行项目的值,我FiltrosResumen
以这种方式发送一个对象:
FiltrosResumenTableModel modelo = (FiltrosResumenTableModel) this.resumenTable.getModel();
resumen = modelo.getResumen(row);
EditResumenIF editConexionesIF = new EditResumenIF(resumen);
编辑:将恢复对象传递给 InternalFrame 构造函数 (EditResumenIF)。所以在这个新的 InternalFrame (EditResumenIF) 中,我将值分配给 JCalendar 和 JTextField 以更改值然后保存它们。将构造函数接收到的相同对象传递给执行查询然后返回字符串的方法,(如果字符串为空,则表示查询成功且没有任何错误)
String error = MainFrame.dataBase.updateResumen(resumen, resumen.getIdFiltro());
我的表怎么知道值改变了?