更改输入对象时缓慢重绘TableViewer

时间:2012-10-17 14:46:08

标签: java swt jface tableviewer

在我的项目中,我有一个TableViewer,它显示来自数据库的大约1k行数据。 ContentProviderArrayContentProvider

当我将List(setInput()对象上的TableViewer)更改为具有相同数据量的另一个时,一切都正常。但是当我想用List<T>更新它,其大小与前一个不同时,应用程序会冻结大约10倍的时间来更改相同数量的数据。

第一个列表的大小为1k,第二个列表的大小约为960.执行会直接在setInput()方法上冻结。

有人知道为什么会这样吗?

1 个答案:

答案 0 :(得分:1)

我认为原因是当您设置具有不同大小的List时,将重新创建整个本机TableItem。因此,为了加快您的表,您应该使用SWT.Virtual样式表。使用虚拟表时,仅创建显示的表项。滚动时会创建其他内容。

有关示例,请参阅http://git.eclipse.org/c/platform/eclipse.platform.ui.git/tree/examples/org.eclipse.jface.snippets/Eclipse%20JFace%20Snippets/org/eclipse/jface/snippets/viewers/Snippet029VirtualTableViewer.java