java - JTable 中显示字段的不良变化

标签 java swing model jtable

目前我有一个应用程序可以让我在 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);

SS

我正在使用包含所有表字段的自定义表模型,所以首先如您所见,我从自定义对象“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());

我的表怎么知道值发生了变化?

最佳答案

默认renderer对于 Object.class 类型的单元格是“显示对象字符串值的标签”。除非你执行 TableModel覆盖的 getColumnClass()返回一些其他值,您的结果并不意外。你可以比较这个 example使用 DefaultTableModel到您的实现。

附录:我的表如何知道值已更改?

JTableTableModelListener ;对模型的任何更改都会(或应该)传播到表中。缺少 complete example ,我猜你正在使用第二个表,table2 , 编辑从原始数据中获得的某些数据的副本,table1 .

  • 确认您正在复制 getResumen() 中的数据而不仅仅是复制对 table1 的引用模型。

  • 在您的 setValueAt() 实现中在TableModeltable2 , 更新 table1 的模型.确切的机制取决于您的 TableModel ;对比两种方法 here .

附录:我没有使用另一个表......我正在传递对我的内部框架的引用

同样的原则也适用。作为直接耦合模型的替代方法,让表的模型是 PropertyChangeListener到内部框架,如图所示here .

关于java - JTable 中显示字段的不良变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18324304/

相关文章:

sql-server - 数据库设计建议-涉及多个表的关系

asp.net-mvc - ASP.NET MVC View 模型命名约定

java - Spring Boot Actuator 端点在 SOAP Web 服务中无法访问

java - 如何限制javafx垂直flowpane中的列数

java - 把安卓手机变成 handle ,通过wifi连接电脑

java - DefaultTreeCellRenderer() 定期执行

model-view-controller - MVC : Data Models and View Models

Java(ME) SQLite 数据类型不匹配的恶性循环

java - 参数内的方法? Java Swing

java - 为什么我的 JFrame 在几秒钟后关闭?