在TornadoFX中,我怎样才能将布局分成不同的类,然后在构建器中使用呢?

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

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构建器添加选项tab并为其分配一些内容。 建设者是聪明的足够了解,如果你add一个标签,它应该分配给该标签的content属性。 所以你可以写:

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

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

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

MyFirstTab类必须是一个ViewFragment