Например, я хочу иметь TabPane, но хочу, чтобы каждая вкладка находилась в отдельном классе. Есть ли способ заставить это работать с застройщиком? Я хочу сделать что-то вроде этого:
tabpane {
MyFirstTab()
MySecondTab()
etc.
}
Например, я хочу иметь TabPane, но хочу, чтобы каждая вкладка находилась в отдельном классе. Есть ли способ заставить это работать с застройщиком? Я хочу сделать что-то вроде этого:
tabpane {
MyFirstTab()
MySecondTab()
etc.
}
Обычно вы добавляете корневой узел из другого View
с помощью команды add
:
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
должен быть View
или Fragment
.