JTable排序和过滤

时间:2011-09-29 14:42:21

标签: java swing sorting jtable filtering

我正在创建一个程序,使用两列过滤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);
    }

当我使用列标题对表进行排序时,我也遇到了类似的问题。

如何解决此问题?

3 个答案:

答案 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()

希望有所帮助

布拉克