Я использую функцию Workspace
в TornadoFX и пытаюсь заставить их работать с Scopes
.Когда я запускаю приложение, мне нужно кое-что настроить, а когда это делается, я запускаю приложение TornadoFX и предоставляю Scope
для моего первого просмотра.После этого я хочу иметь возможность dock
других представлений в моем Workspace
в новом Scope
, но по какой-то причине это не работает: оригинальный View
не отстыковывается, а новый View
Пристыкован Я просто не вижу его на экране.В чем может быть проблема?Вот мой код для воспроизведения проблемы:
fun main(args: Array<String>) {
Application.launch(TestApp::class.java, *args)
}
class ParentScope : Scope() {
val id = UUID.randomUUID().toString().substring(0, 4)
}
class ChildScope : Scope() {
val id = UUID.randomUUID().toString().substring(0, 4)
}
class TestApp : App(Workspace::class) {
override fun onBeforeShow(view: UIComponent) {
workspace.dock<ParentView>(ParentScope())
}
}
class ParentView : View("parent") {
override val scope = super.scope as ParentScope
override val root = hbox {
button("new child") {
action {
workspace.dock<ChildView>(ChildScope())
}
}
}
override fun onDock() {
logger.info("Docking parent (${scope.id})")
}
override fun onUndock() {
logger.info("Undocking parent (${scope.id})")
}
}
class ChildView : View("child") {
override val scope = super.scope as ChildScope
override val root = hbox {
text("In child")
}
override fun onDock() {
logger.info("Docking child (${scope.id})")
}
override fun onUndock() {
logger.info("Undocking child (${scope.id})")
}
}
Вывод после нажатия кнопки w new child
выглядит следующим образом:
10:56:19.415 [JavaFX Application Thread] INFO Test - Docking parent (d202)
10:56:23.967 [JavaFX Application Thread] INFO Test - Docking child (cbc5)
То, что я вижу, является тем же ParentView
.Если я снова нажму new child
, ChildView
будет отстыкован, а новый ChildView
пристыкован, но я все еще вижу только ParentView
:
10:56:31.228 [JavaFX Application Thread] INFO Test - Undocking child (cbc5)
10:56:31.228 [JavaFX Application Thread] INFO Test - Docking child (1dd8)