JTable排序和过滤



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

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

如何解决这个问题?

我认为我的问题是模型在过滤器发生后没有更新

模型永远不会更新。

只有视图被更新,以便以排序/过滤的顺序显示模型中的数据。

表格中的每一行都可以双击打开一个对话框。

所以我假设您将一行数据复制到对话框中,以便可以编辑它,然后将其添加回原始模型。

因此,您需要使用convertRowIndexToModel(...)来获取模型行号,以便您可以访问要在编辑对话框中显示的模型数据。您只对要编辑的行执行此操作,而不是对整个表执行此操作。

请参阅JTable教程,有关于Comparator的优秀示例和关于如何使用TableModel的良好解释

更改数据后,可以按如下方式刷新表;

for(int i = 0; i < table.getRowCount(); i++)
{         table.convertRowIndexToModel(i);     } 
table = new jTable(myModel);

myModel.fireTableDataChanged()

希望有帮助

Burak

最新更新