【问题标题】:TornadoFX/JavaFX treeview doesnt repopulate correctly after mutating multiple ObservableListTornadoFX/JavaFX 树视图在变异多个 ObservableList 后无法正确重新填充
【发布时间】:2019-12-20 21:00:14
【问题描述】:

问题描述

我有一个树视图 (TornadoFX),其中填充了 3 个可观察列表。如果我改变 3 个列表(首先清除它们而不是添加新内容)树视图只包含其中一个可观察列表的内容

我调试的解读

treewiev 在第一个 List 有其新内容并且其他 2 个仍然为空的那一刻实现了自己。它不会在其他 2 个列表获得新内容后立即实现。

到目前为止我所尝试的

  • 在我改变 List 以清空 treewiev 之前调用 treeview.root.children.clear()(结果相同)
  • 在设置所有列表后调用 treeview.refresh()(结果相同)

我的(或多或少是伪的)代码

{//Classes
 R extends X
 A(val name :String) extends X
 B(val name :String, val A :String) extends X
 C(val B :String) extends X
}

{//this is how the Lists get their content each time
 private val aList = observableListOf<A>()
 private val bList = observableListOf<B>()
 private val cList = observableListOf<C>()

 fun setLists(){
     a.clear()
     b.clear()
     c.clear()
     //...
     a.add(...)
     b.add(...)
     c.add(...)

 }
}

{
 treeview<X> {
 root = TreeItem(R)
            populate{ parent ->
                if (parent == root){
                    aList
                } else if (parent.value is A){
                    bList.filter { it.A == parent.value.name } //works always
                }else if (parent.value is B){
                    cList.filter { it.B == parent.value.name } //works at first start but not after set setLists() get recalled
                }else {
                    emptyList<X>() //not sure if this is really needed but the compiler needs something here
                }
            }
 }
}

附加问题

如果需要,请忽略此问题:Intelij 能够运行我的 TornadoFX 应用程序(从主应用程序或使用 TornadoFX 插件的应用程序),但如果我尝试导出它,它不会运行(jar 和 jnlp 都没有)。即使我在 Artifact 菜单中选择 TornadoFX 和所有其他库。但是:如果我在 JavaFX 选项卡中选择 Native Bundle -> image,则生成的 exe(并且只有 exe)正在工作。我还尝试使用 com.github.johnrengelman.shadow 5.2.0 插件创建一个 shadowJar,但这也没有用。那么如何将程序导出为 jar(最好是包含 TornadoFX 的 fatjar)?

【问题讨论】:

  • @fabian Sry 这是一个错字,因为我用一个简单的文本编辑器抽象出实际的类名。我会纠正它。它在实际代码中是正确的,正如我所说的第一次正确填充树视图,如果我之后再次改变列表,我只会遇到问题。编辑:我纠正了错字

标签: javafx treeview populate tornadofx observablelist


【解决方案1】:

好吧,我不知道这是否是完美的解决方案,但我只是简单地清除孩子并再次填充树视图。它有效,但如果这是预期的方式,它就不像我想象的那样“反应灵敏”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    相关资源
    最近更新 更多