2011-09-29 271 views
0

我正在创建一个使用两列过滤JTable内容的程序。我使用了RowSorter,并且一切正常 - 至少根据我所能看到的(视图)。JTable排序和筛选

表中的每一行都可以双击打开一个对话框。该对话框允许您编辑表格中的信息。但是,对话框中的信息仍然是原始视图的信息(在使用过滤之前)。

实施例:

之前在桌子上过滤该第一行是行一个。 过滤后的第一行是b行。

然而,当我双击打开第一行的对话框(过滤后,现在应该是B行,对行中的对话框打开。) [希望我已经说明了这不够好]

我认为我的问题是模型在过滤器发生后没有被更新。我已经试过:

 for(int i = 0; i < table.getRowCount(); i++){ 
     table.convertRowIndexToView(i); 
    } 

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

我也越来越有类似的问题,当我使用的列标题排序表。

我该如何解决这个问题?

+0

*“希望我已经解释清楚了”*一个[SSCCE](http://pscode.org/sscce.html)通常适用于解释代码。另外,你有问题吗? –

回答

2

我想我的问题是,过滤器已经发生

模型从不更新后的模型不被更新。

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

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

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

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

+0

因此,convertRowIndexToModel(...)会将我选择的行索引转换为模型中的行索引吗? – Craig

+0

thanks @camickr !! !它工作:D。这就是我所做的:“int row = myjTable.convertRowIndexToModel(myjTable.rowAtPoint(p));”所以现在我有我需要的行:)) –

0

更改数据后,您可以刷新表格,如下所示;

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

table = new jTable(myModel); 

myModel.fireTableDataChanged() 

希望它可以帮助

布拉克

+0

只是试了一下,不工作:( – Craig

+0

我认为你已经添加了行和列到jTable中,而不是这个,如果你尝试添加行和列到你的模型,那么你可以随时通过.fireTableDataChanged()或.fireTableStructureChanged( );请检查这个例子:http://www.java2s.com/Tutorial/Java/0240__Swing/SampleSortingTableModel.htm。我不知道如何更新表,如果表=新jTable(myModel)不工作。 – HRgiger

+0

我是没有在表格中添加任何行或列,过滤出错对话框 – Craig

1

请看教程的JTable,有外观极好例子约Comparator以及如何使用TableModel的太

好解释