Java 数据更改时更新JTable

Java 数据更改时更新JTable,java,swing,jtable,tablemodel,Java,Swing,Jtable,Tablemodel,这个问题可能已经得到了回答,我读了很多类似的文章,但对我来说并不适用。因此,我有一个带有自定义表模型的JTable,它扩展了DefaultTableModel。我的数据是对象[][]数据和列名字符串[]列名。那么,当数据发生更改时,如何更新表?我一直在使用tableModel.setDataVectordata和columnNames,它正在工作,但它将我的自定义单元格渲染器重置为默认值。谢谢。不要更改阵列!DefaultTableModel将数据从阵列复制到DefaultTableModel使

这个问题可能已经得到了回答,我读了很多类似的文章,但对我来说并不适用。因此,我有一个带有自定义表模型的JTable,它扩展了DefaultTableModel。我的数据是对象[][]数据和列名字符串[]列名。那么,当数据发生更改时,如何更新表?我一直在使用tableModel.setDataVectordata和columnNames,它正在工作,但它将我的自定义单元格渲染器重置为默认值。谢谢。

不要更改阵列!DefaultTableModel将数据从阵列复制到DefaultTableModel使用的内部存储器

相反,您需要使用setValueAt直接更改TableModel。。。JTable或TableModel的方法。然后,TableModel将通知表已进行了更改

我一直在使用tableModel.setDataVectordata和columnNames,它正在工作,但它将我的自定义单元格渲染器重置为默认值

如果出于某种原因需要重新创建整个TableModel,则可以使用:

table.setAutoCreateColumnsFromModel( false );

第一次使用TableModel创建表之后。现在,下次使用setDataVector时。。。方法不会重新创建表的TableColumnModel,这意味着您不会丢失自定义渲染器。

不要更改数组!DefaultTableModel将数据从阵列复制到DefaultTableModel使用的内部存储器

相反,您需要使用setValueAt直接更改TableModel。。。JTable或TableModel的方法。然后,TableModel将通知表已进行了更改

我一直在使用tableModel.setDataVectordata和columnNames,它正在工作,但它将我的自定义单元格渲染器重置为默认值

如果出于某种原因需要重新创建整个TableModel,则可以使用:

table.setAutoCreateColumnsFromModel( false );

第一次使用TableModel创建表之后。现在,下次使用setDataVector时。。。方法不会重新创建表的TableColumnModel,这意味着您不会丢失自定义渲染器。

您的数据在哪些方面发生了更改?是否通过表格或其他外部方式进行更改?表API能够自我管理,因此通过表更改值不需要您进行任何额外的输入。外部所做的更改稍微复杂一些,这取决于更改的数量。您可以调用TableModelsetValueAt进行简单更改,或者完全替换JTable的模型进行更复杂的chmages我的数据更改如下:例如,数据[0][0]是5,现在是10。那么,我如何对表进行更改呢?或者您认为我不应该通过tableModel.setDataVector.显示数据。。并使用table.setValue。。相反,您的数据在哪些方面发生了变化?是否通过表格或其他外部方式进行更改?表API能够自我管理,因此通过表更改值不需要您进行任何额外的输入。外部所做的更改稍微复杂一些,这取决于更改的数量。您可以调用TableModelsetValueAt进行简单更改,或者完全替换JTable的模型进行更复杂的chmages我的数据更改如下:例如,数据[0][0]是5,现在是10。那么,我如何对表进行更改呢?或者您认为我不应该通过tableModel.setDataVector.显示数据。。并使用table.setValue。。相反?嗯,听起来不错。但重新创建整个表模型的原因是什么?在我的例子中,我有一个包含一些文章和它们的数字统计的表。因此,当用户在下面的列中键入新状态时,后面的列将显示差异和货币收入。这就是重新创建整个表模型的原因,还是我应该坚持使用table.setValue@您正在更改一个单元格的值,因此在。。。方法但重新创建整个表模型的原因是什么当您更改所有数据时。也许你可以查询数据库。好的,非常感谢你的解释。我现在明白了。最美好的祝福!我会接受答案。非常感谢你的回答-非常有用!嗯,听起来不错。但重新创建整个表模型的原因是什么?在我的例子中,我有一个包含一些文章和它们的数字统计的表。因此,当用户在下面的列中键入新状态时,后面的列将显示差异和货币收入。这就是重新创建整个表模型的原因,还是我应该坚持使用table.setValue@您正在更改一个单元格的值,因此在。。。方法但重新创建整个表模型的原因是什么当您更改所有数据时。也许你可以查询数据库。好的,非常感谢你的解释。我现在明白了。最美好的祝福!我会接受答案。非常感谢你的回答-非常有用!