【问题标题】:Nattable - refreshing underlying dataNattable - 刷新底层数据
【发布时间】:2015-10-02 19:30:18
【问题描述】:

我们想将一些 JFace TableViewer 更改为 NatTable。 TableViewer 有一个方便的方法来更改数据源,即:

tableViewer.setInput(source)

我们在查询数据库时使用了这个方法传递了一个新的列表。 NatTable 中是否有类似的功能?

【问题讨论】:

    标签: java swt eclipse-rcp nebula nattable


    【解决方案1】:

    AFAIK,在 NatTable 中,您使用 IDataProvider 的实现。对于您的List 案例,您可以使用ListDataProvider

    vogella.com 上有一个关于 NatTable 的教程,a section on data provision 为您提供了如何将 List 模型与 NatTable 一起使用的示例。这是一个很好的起点。 NatTable 有一个相当复杂的 API,我不想重复文档。

    【讨论】:

    • 谢谢,但这并不能解决我的问题。我无法即时替换基础 List 或 ListDataProvider 引用。 @dirk-fauth 在这个问题中指出,最好是使用 .clear() & .addAll(List)。
    【解决方案2】:

    NatTable 可视化列表中包含的数据。要交换 NatTable 中显示的数据,您通常创建一个 ListDataProvider 以使用可以在运行时修改的 List 实例进行数据访问。

    您通常会通过以下方式交换数据:

    • 为 NatTable 创建一个列表 -> natList
    • 从数据库加载数据 -> dbList
    • natList.clear()
    • natList.addAll(dbList)

    取决于您是否使用 GlazedLists,您需要在操作完成后刷新 NatTable。

    如果您使用 GlazedLists 和 GlazedListsEventLayer,您需要考虑通过在更新数据列表内容之前停用 GlazedListsEventLayer 来进行批量更新,以避免不必要的事件触发。

    【讨论】:

    • 谢谢,这意味着,不要像我们在 TableViewer 实现中那样引用新的 List 对象,建议在底层 natList 上使用.clear() & .addAll()。
    • 没错,这就是当前实现的方式。或者,您可以尝试扩展 ListDataProvider 并添加 API 以在运行时替换底层列表。但是,如果您使用 GlazedLists 来包装原始列表恕我直言,则清除和添加机制会更好。
    • 看看 API GlazedListsEventLayer#deactivate() 和 GlazedListsEventLayer#activate()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多