2013-02-21 76 views
1

我目前有一个大表格(aprox 1000行)和大约20列。在20列中,我需要每2-3秒刷新一次(从创建对象起持续时间),我尝试过每隔3秒刷新整个表格,但由于行数太多,这是一个很大的性能这整个表格的罚款更新。只刷新SWT/JFace TableViewer中的一列/单元格

任何人都看到一种方法来刷新JFace tableviewer中只有一个单元格/一列?我需要一个经过时间列刷新,就是这样。

任何帮助,非常感谢。

感谢 米尔恰

回答

2

我看到TableViewer并不希望刷新连续的一个单元格。

AbstractTableViewer 
protected void doUpdateItem(Widget widget, Object element, boolean fullMap) 

您需要重写上述方法。当前实现刷新整个行(基本上在每个单元调用LabelProvider

您也可以按照相同的实现,但是调用特定的ViewerCell

+0

谢谢你。基于此,我设法做了类似的事情。我发现这是更新单个单元格的唯一方法,方法是扩展表格查看器,从而访问一些受保护的方法,这些方法允许我访问tableviewer中的单个单元格。 – Mircea 2013-02-23 05:46:57

1

的TableViewer中的刷新()方法,就是要触发时,表示您的表行的模型对象列表中被改变。如果您只需要更新特定行或单元格中显示的文本或图像,则应该使用update()方法。有这种方法的变体,可以让您根据需要尽可能少地更新。

+0

更新我已经尝试更新()很好,但似乎无论怎样我打电话它(不管我使用什么变体......),它总是会更新整条线,这对我来说是不可接受的,因为它会导致很大的性能损失。 – Mircea 2013-02-21 21:02:10

+0

我从来没有见过单行更新花费大量时间。我会看看你的标签提供者实现。也许你在那里做得太多了。如果您在标签提供程序中执行大量计算,则应考虑缓存结果,以便标签查找是即时的。 – 2013-02-21 22:10:22

+0

更新单行需要非常少的时间,但我有5k行,更新必须每2-3秒完成一次,因此您可以想象负载。 – Mircea 2013-02-22 11:46:00

相关问题