2

例如,我想要一个 TabPane,但我希望每个选项卡都在其单独的类中。有没有办法让建造者完成这项工作?我想做这样的事情:

tabpane {
    MyFirstTab()
    MySecondTab()
    etc.
}
4

1 回答 1

6

View通常,您可以使用以下add命令从另一个添加根节点:

add(SomeView::class)

您还可以注入View并添加它:

val someView: SomeView by inject()

override val root: borderpane {
    center {
        add(someView)
    }
}

add和做是一样的this += someView。这里发生的是框架找到rootView 的节点并将其附加到children父节点的属性中。它还知道特殊容器,例如BorderPane,因此当您在center构建器等中添加某些内容时它会做正确的事情

然而TabPane,需要Tab实例,这些实例不是节点。您需要使用tab构建器添加选项卡并为其分配一些内容。构建者很聪明,可以理解,如果你add在 Tab 内做,它应该分配给contentTab 的属性。因此你可以写:

tab("My First Tab") {
    add(MyFirstTab::class)
}

或者,如果您已经拥有要分配的内容的实例:

tab("My First Tab") {
    add(myFirstTab)
}

MyFirstTab必须是 aViewFragment

于 2017-01-22T09:50:47.157 回答