在 TornadoFX 中,如何将布局分离到不同的 类,然后在生成器中使用它们?
In TornadoFX, how can I separate layouts to different classes and then use them in builder?
例如,我想要一个 TabPane,但我希望每个选项卡都在其单独的 class 中。有没有办法让这个与构建器一起工作?我想做这样的事情:
tabpane {
MyFirstTab()
MySecondTab()
etc.
}
一般情况下,您使用 add
命令从另一个 View
添加根节点:
add(SomeView::class)
你也可以注入一个View
然后添加:
val someView: SomeView by inject()
override val root: borderpane {
center {
add(someView)
}
}
add
等同于 this += someView
。这里发生的是框架找到视图的 root
节点并将其附加到父节点的 children
属性。它也知道像 BorderPane
这样的特殊容器,所以当你在 center
构建器等中添加一些东西时它会做正确的事情
然而,TabPane
需要 Tab
个实例,这些实例不是节点。您需要使用 tab
构建器添加选项卡并为其分配一些内容。构建者足够聪明,可以理解如果您在选项卡内执行 add
,它应该分配给选项卡的 content
属性。因此你可以这样写:
tab("My First Tab") {
add(MyFirstTab::class)
}
或者,如果您已经有了要分配的内容实例:
tab("My First Tab") {
add(myFirstTab)
}
MyFirstTab
class 必须是 View
或 Fragment
.
例如,我想要一个 TabPane,但我希望每个选项卡都在其单独的 class 中。有没有办法让这个与构建器一起工作?我想做这样的事情:
tabpane {
MyFirstTab()
MySecondTab()
etc.
}
一般情况下,您使用 add
命令从另一个 View
添加根节点:
add(SomeView::class)
你也可以注入一个View
然后添加:
val someView: SomeView by inject()
override val root: borderpane {
center {
add(someView)
}
}
add
等同于 this += someView
。这里发生的是框架找到视图的 root
节点并将其附加到父节点的 children
属性。它也知道像 BorderPane
这样的特殊容器,所以当你在 center
构建器等中添加一些东西时它会做正确的事情
然而,TabPane
需要 Tab
个实例,这些实例不是节点。您需要使用 tab
构建器添加选项卡并为其分配一些内容。构建者足够聪明,可以理解如果您在选项卡内执行 add
,它应该分配给选项卡的 content
属性。因此你可以这样写:
tab("My First Tab") {
add(MyFirstTab::class)
}
或者,如果您已经有了要分配的内容实例:
tab("My First Tab") {
add(myFirstTab)
}
MyFirstTab
class 必须是 View
或 Fragment
.