2011-11-29 57 views
0

编写我的程序时出现性能问题,我需要您的帮助! :)使用数据向量对JTable进行排序

我使用JTable来查看从我制作的向量中取得的测试结果,它有4列。当我点击一行时,该测试的保存txt文件的详细信息将显示在子窗口中。另外,当我点击列标题时,事件将向量发送给一个函数,该函数根据按下的列进行排序。每次需要输入新值时,再次调用排序功能。

我的程序可以很好地处理少量的行。但是,当我输入150行时,每当我输入一个新行时,Table弹出(排序可能需要很长时间),但是我必须保持向量与jable同步,因为“push to view the结果“选项。

我真的很感谢这个帮助。 谢谢

+0

闪烁的唯一可能原因是您可能重新创建了整个模型......你呢? – DejanLekic

+0

nop ...模型只创建一次....但在输入新值之前,我删除所有元素并再次使用向量填充模型 – moshe

+0

这正是我怀疑你正在做的事情......是的,你不要重新创建模型,但是您正在重新创建底层存储对象。这是一个很大的开销,应该避免。不要重新创建矢量。你总是通过'add()'向vector添加新行。无论如何,JTable将自动对其进行排序。 – DejanLekic

回答

0

使用JTable的内部分类器(DefaultRowSorter)。不要重新创建包含数据的矢量 - 使用Vector的add()方法添加新记录。在很多年的Java GUI开发中,我还没有看到过一个我必须在TableModel中保存记录的情况。确保getColumnClass()返回一个正确的类型,所以默认的排序器知道如何对列进行排序,这就是全部。

+0

删除矢量的排序和组织。如果你想要一个特殊的排序,做你自己的RowSorter实现。 – DejanLekic

3

你不应该自己做任何排序。 JTable支持本地排序,并有convertRowIndexToModelconvertRowIndexToView方法从视图索引转到模型索引,反之亦然。

请参阅http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#sorting

+0

谢谢,但我已经知道,我可以使用表的分拣机,但事情是,它将排序行而不改变矢量位置,然后我在容器中的真实值和在显示 – moshe

+0

这可能是因为您在需要时不使用convertRowIndexToModel和convertRowIndexToView。如果您有一个已排序的表并具有所选行的索引,请调用convertRowIndexToModel以获取模型(矢量)中此行的索引。如果矢量中有一些索引并想知道它在视图中的哪一行,请使用convertRowIndexToView。如果问题在其他地方,请编辑您的问题以使问题更清楚并向我们展示导致此问题的一些代码。 –

+0

+1,你甚至可能甚至不需要使用convertXXX方法。如果使用table.getValueAt(...),则按排序的视图顺序访问数据。如果使用table.getModel()。getValueAt(...),则会以未排序的模型顺序访问数据。你不应该试图直接访问Vector。 – camickr