eclipse-plugin - TreeViewer 到 GridTreeViewer : bridge between existing ITreeContentProviders and "lazy" ObservableListTreeContentProvider

标签 eclipse-plugin swt jface nebula eclipse-databinding

TL;博士

基于 Thomas Schindl 的文章 JFace-Viewer and Eclipse Databinding with > 10.000 Objects (这表明一个非常好的主意),我想转换一个常规的 TreeViewer + 多个 ITreeContentProvider Nebula's GridTreeViewer 的实现使用 ObservableListTreeContentProvider , 一个 VisibleRangeChangedListenerEclipse Data Binding使其“懒惰”(懒惰)并按需加载数据 .

我应该如何重写我现有的常规 ITreeContentProvider使用与 ObservableListTreeContentProvider 相同的层次结构的实现?
我可以在新旧解决方案之间架起一座“桥梁”吗?
使用 DelegatingListProperty有点像 this ?还有其他想法吗?
我发现了一些过于简单的例子,但我并没有真正理解在如此复杂的分层树格式中使用数据绑定(bind)的概念。

示例树和内容提供者:

内容提供者 1.:

|- A1
   |-- B1
       |-- MyMessage1
|- A2
   |-- B2
       |-- MyMessage2

内容提供者 2.:
|- C1
   |-- D1
       |-- MyMessage1
|- C2
   |-- D2
       |-- MyMessage2

更长的解释

我有一个显示 的 View 大量对象在分层 使用自定义格式 TreeViewer 经典ITreeContentProviderLabelProvider + ITableLabelProvider实现。还有一个菜单,用户可以在其中选择他们希望以哪种格式显示此层次结构。当用户选择另一种显示格式时,唯一发生的事情是另一个 ITreeContentProvider实现设置为查看器,我以编程方式刷新查看器。
它可以工作,但是由于元素数量巨大(在某些情况下,100-200k 行,请不要问原因,它必须工作),显示项目可以是 ,UI有时会死机,因为TreeItems上有太多的监听器, View 刷新需要很多时间等等......

所以我想使用某种 懒人解决方案同时将模型元素加载到内存中。
我已经尝试过 SWT.VIRTUAL and ILazyTreeContentProvider ,但它表现不佳(即使使用 viewer.setUseHashlookup(true) )并且存在问题(滚动时,TreeItems 需要很长时间才能加载,有它的 bugs ,排序,过滤等问题)。

现在我阅读了 Thomas Schindl 的博客文章:JFace-Viewer and Eclipse Databinding with > 10.000 Objects .我想试试这个 Eclipse Nebula Grid GridTreeViewer 和 + ObservableListTreeContentProvider (这也是一个 ITreeContentProvider 实现)和一个 VisibleRangeChangedListener和“懒惰的”标签提供者(如文章中所示)。
我可以以某种方式使用我现有的ITreeContentProvider吗?实现并在此和新的 ObservableListTreeContentProvider 之间架起一座“桥梁” ?

顺便说一句,我检查了 Nebula NatTable ,但我发现将现有内容提供程序迁移到这个新解决方案非常困难,它的 API 和方法完全不同(从子到父的层次结构,而不是相反的方式),以及与 Trees 相关的文档仍然是空的。

最佳答案

Nebula 不久前将 Grid 变成了虚拟的。以下是查看器的片段,其中包含一些惰性内容提供者的示例。

http://git.eclipse.org/c/nebula/org.eclipse.nebula.git/tree/examples/org.eclipse.nebula.snippets/src/org/eclipse/nebula/snippets/grid/viewer

关于eclipse-plugin - TreeViewer 到 GridTreeViewer : bridge between existing ITreeContentProviders and "lazy" ObservableListTreeContentProvider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42890754/

相关文章:

java - 双击 tableviewer Eclipse 插件获取表格元素

java - 如何在 SWT 表头中放置一个 "(de)select all"复选框?

java - SWT (JFace) 中的 FontRegistry 和 Dispose

java - SWT - 如何在向导中创建两个复合 Material

java - 在 Eclipse 中使用 SWT Bot Generator 时出现空指针异常

eclipse SDK中Android NDK插件安装

具有各种不错功能的 CSS 编辑器/GUI/应用程序

combobox - 如何在 SWT 中向组合框添加不可选择的分隔符

java - e4:依赖注入(inject)和处理小部件

java - 数据绑定(bind)到未知类型的容器