我正在尝试使用Tornadofx 1.7.18版动态创建一个标签窗格,由于某些原因,这些标签被复制了。
我有一个配置文件,该文件以可变的值加载到应用程序中,以便程序遵循SOLID原则,特别是开闭原则。
我使用Javafx解决方案通过在tabpane.tabs.add()
循环内调用forEach
来添加标签。
这是我的问题的简化版本,但仍然显示该问题。
class Example: View() {
private val tabList = List(3) {
return@List it.toString()
}
override val root = tabpane()
init {
with(root) {
tabClosingPolicy = TabPane.TabClosingPolicy.UNAVAILABLE
tabList.forEach {
this.tabs.add(
tab(it) {
label("Hello $it")
}
)
}
}
}
}
最后显示两个“ 0”选项卡都显示为选中状态。该窗口最终在Windows机器上看起来像这样:
+----------------+
|icon| |-|[]|X|
+----------------+
||0|0|1|1|2|2| |
+----------------+
|Hello 0 |
+----------------+
答案 0 :(得分:1)
代码的问题是您正在使用tab()
构建器,然后将结果添加到选项卡列表中。绝对地,TornadoFX中的每个构建器都会自动将其创建的内容添加到其父项中,因此您不必手动进行此操作。
每个生成器还返回其生成的内容,因此这就是您的代码甚至进行编译的原因。您只需删除周围的this.tabs.add()
调用即可解决该错误,如下所示:
tabList.forEach {
tab(it) {
label("Hello $it")
}
}
为完整起见,这是使用最佳实践的完整根构建器:
override val root = tabpane {
tabClosingPolicy = TabPane.TabClosingPolicy.UNAVAILABLE
tabList.forEach {
tab(it) {
label("Hello $it")
}
}
}