我正在使用TornadoFX的Workspace
功能,并且试图使它们与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})")
}
}
停靠了,我只是在屏幕上看不到它。可能是什么问题呢?这是我的代码来重现该问题:
new child
单击w 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)
:
list-style-type: none;
答案 0 :(得分:1)
App
已经定义了一个Scope
和一个相应的Workspace
实例,因此,当您的初始View
停靠在Workspace
中时,新的{{ 1}}定义了一个新的ParentScope
实例。当您将Workspace
停靠在该ChildView
中时,它确实可以执行此操作,但是有关的工作区不会显示在屏幕上。
要解决此问题,您可以像这样覆盖应用程序的主要范围:
Workspace
还请注意,我使用了class TestApp : WorkspaceApp(ParentView::class) {
init {
scope = ParentScope()
}
}
子类,因此不需要手动停靠WorkspaceApp
。
在查看此问题时,我意识到,如果将UIComponent停靠在工作区中,则应该假定它已停靠在其中。因此,我已提交了一个修复程序,以便您的初始代码无需修改即可工作