Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用NatTable实现树_Java_Swt_Jface_Nebula_Nattable - Fatal编程技术网

Java 使用NatTable实现树

Java 使用NatTable实现树,java,swt,jface,nebula,nattable,Java,Swt,Jface,Nebula,Nattable,我尝试从JFace TreeViewer切换到NatTable。不幸的是,我没有找到很多关于用NatTable实现树的文档。所以我有一些问题 对于TreeViewer,我使用setInput()来提供新的输入。如何使用NatTable实现同样的效果?对基础数据源列表调用clear()和addAll()是否合适?(我使用glazedlist) 我使用descriptedclear()/addAll()方法在查询数据库后传递新数据。在树的扩展状态丢失后,所有节点都被关闭。我用的JFace TreeV

我尝试从JFace TreeViewer切换到NatTable。不幸的是,我没有找到很多关于用NatTable实现树的文档。所以我有一些问题

  • 对于TreeViewer,我使用
    setInput()
    来提供新的输入。如何使用NatTable实现同样的效果?对基础数据源
    列表
    调用
    clear()
    addAll()
    是否合适?(我使用glazedlist)

  • 我使用descripted
    clear()
    /
    addAll()
    方法在查询数据库后传递新数据。在树的扩展状态丢失后,所有节点都被关闭。我用的JFace TreeViewer
    getExpandedElements()
    /
    setExpandedElements()
    以保持展开状态。NatTable中有类似的产品吗

  • 是否可以仅在单击父节点时加载子树节点?我不能预先构建所有树数据,因为我可以在其中包含循环(严格地说,我的数据不是真正的树,但可以像树一样方便地显示)

  • UPD:我不确定是在这里提问还是单独提问

  • 我在分类方面有问题。我在这里发现了类似的讨论,但我仍然没有深刻的理解 我的问题:在对“树”列以外的任何列进行排序后,子节点都可能移动到无效的父节点。尽管元素的顺序在层次结构的所有级别上都是正确的。我使用
    SortableTreeComparator
    和as
    treeComparator
    我使用我的自定义比较器(而不是
    glazedList.beanPropertyComparator
    ,如示例所示)。这里可能有什么问题?

    首先,您可以查看并查看树的实现方式

  • 是的,数据源列表是放置和管理数据对象的地方
  • 为了管理展开状态,可以使用
    ca.odell.glazedlists.TreeList.ExpansionModel
    ,它是用作输入的
    TreeList
    的一部分
  • 据我所知,NatTable的一个主要优点是能够按需加载数据,只有当数据应该可见时。这是默认行为
  • 是的,这很好,甚至建议这样做。NatTable使数据可视化。它不在乎它来自哪里,至少如果
    IDataProvider
    能够以二维方式提供数据。由于我们的抽象级别,NatTable中没有
    setInput()
    。在1.4中,我们打开了API,以便能够在运行时将
    IDataProvider
    设置为
    DataLayer
    ,这与此类似
  • 您需要实现一个能记住扩展状态的
    ExpansionModel
    。在NatTable中,由于相同的原因,
    GroupByExpansionModel
    中也有相同的内容
  • 我自己在NatTable中还没有这样做,但我经常看到这种情况。所以是的,这是可能的。IIRC您需要实现一个定制的
    ITreeRowModel
    ,如果需要的话,它可以在expand上执行延迟加载。我建议扩展
    glazedListRetreRowmodel
    ,并检查需要覆盖的各种扩展方法

  • 谢谢,我已经实现了延迟加载并使用了相同的方法。但我面临着排序方面的新问题。我已经更新了我的问题。你的帮助将得到真正的重视,最重要的事实是,你需要考虑两个比较器排序树。一个是将树按正确的顺序排列,另一个是内容。听起来比较器只检查内容,不尊重树层次结构,因此破坏了树结构。但如果没有进一步的信息,我就说不出来了。如果没有帮助的话,我还建议创建一个新问题。我创建了一个新问题,因为我几乎放弃了。即使使用示例代码,我也有这个问题。