我有一个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中的位置没有更新,并且根据原始位置编辑值。
答案 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