例如,我想要一个TabPane,但我希望每个单独的类都有选项卡。有没有办法让这个与建设者合作?我想做这样的事情:
tabpane {
MyFirstTab()
MySecondTab()
etc.
}
答案 0 :(得分:5)
在一般情况下,您使用View
命令从另一个add
添加根节点:
add(SomeView::class)
您也可以注入View
并添加它:
val someView: SomeView by inject()
override val root: borderpane {
center {
add(someView)
}
}
add
与执行this += someView
相同。这里发生的是框架找到View的root
节点并将其附加到父节点的children
属性。它也知道像BorderPane
这样的特殊容器,所以当你在center
构建器等中添加内容时,它会做正确的事。
然而,TabPane
需要Tab
个实例,这些实例不是节点。您需要使用tab
构建器添加选项卡,并为其分配一些内容。构建者很聪明地理解,如果你在Tab中做add
,它应该分配给Tab的content
属性。因此你可以写:
tab("My First Tab") {
add(MyFirstTab::class)
}
或者,如果您已经拥有要分配的内容实例:
tab("My First Tab") {
add(myFirstTab)
}
MyFirstTab
课程必须是View
或Fragment
。