在TornadoFX中,如何将布局分离到不同的类,然后在构建器中使用它们?

时间:2017-01-22 09:19:50

标签: kotlin tornadofx

例如,我想要一个TabPane,但我希望每个单独的类都有选项卡。有没有办法让这个与建设者合作?我想做这样的事情:

tabpane {
    MyFirstTab()
    MySecondTab()
    etc.
}

1 个答案:

答案 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课程必须是ViewFragment