当前位置: 首页 > 知识库问答 >
问题:

JTable中显示字段的不良更改

邬弘化
2023-03-14

目前,我有一个应用程序,允许我在Jtable中显示数据,然后当我双击Jtable时,打开一个小窗口,只编辑3个字段,注释,过期日期和描述。我更新this值(以preparedstatement)问题是,每次我更新数据库时,我的表只是刷新自己,用我刚才插入到另一个窗口中的新值更改dateFormat,但格式不同!这怎么可能?

我不明白这一点,因为当我按下“搜索”按钮时,我只为表设置了一个模型,其中包含以下代码:

ArrayList<FiltrosResumen> filtrosResumenList = MainFrame.dataBase.searchFiltroResumen(query);
        FiltrosResumenTableModel resumenModel = new FiltrosResumenTableModel(filtrosResumenList);
        this.resumenTable.setModel(resumenModel);
        hideColumns(1);

我使用的是一个包含所有表字段的自定义表模型,因此首先,正如您所看到的,我从一个自定义对象“FiltrosResumeen”中将html" target="_blank">数据库中的所有行colaryList到一个ArrayList中,然后将它从扩展AbstractTableMode的自定义模型“FiltrosResumentableModel”传递给构造函数

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的构造函数。

Edit:为了更改其中一个行项的值,我以以下方式发送了一个FiltrosResumeen对象:

FiltrosResumenTableModel modelo = (FiltrosResumenTableModel) this.resumenTable.getModel();
resumen = modelo.getResumen(row);
EditResumenIF editConexionesIF = new EditResumenIF(resumen);
String error = MainFrame.dataBase.updateResumen(resumen, resumen.getIdFiltro());

为什么我的表知道值改变了?

共有1个答案

齐乐
2023-03-14

object.class类型的单元格的默认呈现器是“显示对象字符串值的标签”。除非TableModel的实现重写GetColumnClass()返回其他值,否则结果并不意外。您可以使用DefaultTableModel将此示例与您的实现进行比较。

补遗:我的表如何知道值发生了变化?

JTableTableModelListener;对模型的任何更改都将(或应该)传播到表。如果没有完整的示例,我猜想您正在使用第二个表table2来编辑从原始表table1中获得的某些数据的副本。

table2tablemodel中实现setvalueat()时,更新table1的模型。确切的机制取决于您的tablemodel;这里对两种方法进行了对比。

补充:我没有使用另一个表…我正在传递一个对我的内部框架的引用。

同样的原则也适用。作为直接耦合模型的替代方案,让表的模型成为一个PropertyChangeListener到内部框架,如下所示。

 类似资料:
  • 问题内容: 有什么方法可以更改显示在HTML的密码字段中的星号()或在某些浏览器中的项目符号()? 问题答案: 您不能在标准密码字段中更改密码屏蔽字符。您可以使用文本框来伪造它,但是由于缺乏从密码文本框中获得的保护,因此它导致了较弱的安全模型。附带说明一下,更改这样的项目的行为通常不是一个好主意,因为用户已经习惯了一种掩蔽形式,并且您将引入另一种掩蔽形式- 如果没有充分的理由这样做,我会d避免使用

  • 问题内容: 这是我的代码: 但是,当我运行代码时,该表不显示列名。我在这一行设置1时,它仅显示一个空行: 请告诉我我的代码在哪里错误?谢谢! 编辑:有人问了同样的问题(JTable中没有标题),但是答案是将Jtable添加到JScrollPane,这对@@无济于事。编辑:嗨, 丹 ,我已经添加了完整的Constructor,这是方法的代码: 谢谢! 问题答案: 您使用了错误的方式。为使其正常工作,

  • 问题内容: 我想做的事: 我想列出数据库的一些记录。此列表应显示在 JFrame弹出窗口中。 描述: 我有3节课: Main.java(运行程序) PeopleTableModel.java(保存数据,扩展AbstractTableModel) PeopleTable.java(保存逻辑,扩展JTable) 将JFrame设置为 可见时,为什么会出现ArrayIndexOutOfBoundsExc

  • 问题内容: 我有以下代码实例化JTable:该表具有正确数量的行和列,但是在列顶部没有标题的迹象。 与其他制表代码相比,我看不到任何遗漏的步骤,但是必须缺少某些内容。 问题答案: 把你的JTable里面。试试这个:

  • 通过单击Experiment Parameters选项卡中的一个按钮(参见下面的屏幕截图),我创建并运行一个“PreviewAction”,它创建了一个新的选项卡,并用必要的组件填充它。下面是的代码。编辑:我还发布了一个自包含的最小版本,它模拟了真实项目中的条件,并展示了相同的行为。 这里至少存在两个问题: (或)根本不呈现 没有框架本身那么宽,我不知道为什么 我在挥杆方面不是很好,所以我可能错过