我正在创建一个程序,使用两列过滤JTable的内容。我使用了RowSorter,一切正常 - 至少根据我所看到的(视图)。
可以双击表格上的每一行来打开一个对话框。此对话框允许您编辑表格上的信息。但是,对话框中的信息仍然是原始视图的信息(在使用过滤之前)。
示例:
在过滤表格的第一行之前是第a行。 过滤后,表格上的第一行是b行。
但是,当我双击打开第一行的对话框时(过滤后,现在应该是行b,行a的对话框打开。) [希望我已经解释得这么好了]
我认为我的问题是在过滤器发生后模型没有更新。我试过了:
for(int i = 0; i < table.getRowCount(); i++){
table.convertRowIndexToView(i);
}
和
for(int i = 0; i < table.getRowCount(); i++){
table.convertRowIndexToModel(i);
}
当我使用列标题对表进行排序时,我也遇到了类似的问题。
如何解决此问题?
答案 0 :(得分:2)
我认为我的问题是在过滤器发生后模型没有更新
模型永远不会更新。
仅更新视图以按排序/筛选顺序显示模型中的数据。
可以双击表格中的每一行以打开对话框。
所以我假设您将一行的数据复制到对话框中,以便对其进行编辑,然后再添加回原始模型。
因此,您需要使用convertRowIndexToModel(...)来获取模型行号,以便您可以访问要在编辑对话框中显示的模型数据。您只能对要编辑的行执行此操作,而不是对整个表执行此操作。
答案 1 :(得分:1)
请参阅有关JTable的教程,有关于Comparator
的优秀示例以及有关如何使用TableModel的详细解释
答案 2 :(得分:0)
更改数据后,您可以刷新表格,如下所示;
for(int i = 0; i < table.getRowCount(); i++)
{ table.convertRowIndexToModel(i); }
table = new jTable(myModel);
或
myModel.fireTableDataChanged()
希望有所帮助
布拉克