【发布时间】: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