在重新排序列时,不会更新填充数据库数据的JTable

时间:2010-04-12 13:23:09

标签: jtable resultset tablemodel

我有一个JTable填充了我的数据库表的数据(所以我使用了ResultSetTableModel)并使用TableRowSorter对行进行排序,因为我单击了JTable的一列。数据显示在jTable中没有问题;

但是当我通过某个列表对JTable进行排序(例如,按主键值排序),并从排序的jTable中编辑一些单元格时,更改的值是在ordenation之前处于该位置的旧单元格专栏。

例如: 假设我有一个包含2列的表 - 名称年龄。我的表格包含以下数据:

c 1
b 2
a 3

当我在JTable中按名称命名时,它就像这样

a 3
b 2
c 1

如果我编辑值“1”,则在编辑之后,表格会变成这样的

a 1
b 2
c 1

似乎JTable中的位置没有更新,并且根据原始位置编辑值。

1 个答案:

答案 0 :(得分:2)

首先,请注意数据实际上包含在模型中,而jtable只是一个视图。 通常,默认情况下,jtable的行和列对应于表的行和列。排序时,jtable的row,col之间的映射可能不会保持不变, 所以当你想编辑说单元格(rowVal,colVal)时, 做

table.setValueAt(object,table.convertRowIndexToModel(rowVal),convertColumnIndexToModel(colVal))

这应该在排序后保留映射。 请阅读此处的排序和过滤部分:http://java.sun.com/docs/books/tutorial/uiswing/components/table.html