【问题标题】:Refresh only one column/cell from a SWT / JFace TableViewer从 SWT / JFace TableViewer 仅刷新一列/单元格
【发布时间】:2013-02-06 10:26:40
【问题描述】:

我目前有一张大桌子(大约 1000 行)和大约 20 列。在 20 列中,我需要每 2-3 秒刷新一次(保存对象创建后经过的时间),我尝试过每 3 秒刷新一次整个表,但由于行数太多,这是一个很大的性能惩罚整个表的刷新。

有人见过在 JFace tableviewer 中只刷新一个单元格/一列的方法吗?我需要一个经过时间的列刷新,就是这样。

非常感谢任何帮助。

谢谢 米尔恰

【问题讨论】:

    标签: eclipse jface tableviewer


    【解决方案1】:

    我看到 TableViewer 没想到会连续刷新一个单元格。

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

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

    您可以遵循相同的实现,但在特定的 ViewerCell 上调用更新

    【讨论】:

    • 谢谢。基于此,我设法做了类似的事情。我发现这是更新单个单元格的唯一方法,通过扩展表格查看器并因此可以访问一些受保护的方法,这些方法允许我访问表格查看器中的单个单元格。
    【解决方案2】:

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

    【讨论】:

    • 我也尝试过 update() 但似乎无论我如何称呼它(无论我使用什么变体 ... ),它总是会更新整行,这对我来说是不可接受的因为这会导致很大的性能损失。
    • 我从未见过需要花费大量时间的单行更新。我会看看您的标签提供程序实施。也许你在那里做的太多了。如果您在标签提供程序中进行大量计算,您应该考虑缓存结果,以便标签查找是即时的。
    • 更新单行需要很短的时间,但我有 5k 行,并且必须每 2-3 秒更新一次,所以你可以想象负载。
    猜你喜欢
    • 2011-12-28
    • 1970-01-01
    • 1970-01-01
    • 2011-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    相关资源
    最近更新 更多