显示来自控制器的对话框

show dialog from controller

我想在我的 tornadofx 应用程序中显示一个对话框,但我不想在视图中创建该对话框。我试过在控制器上创建一个对话框,但这似乎不起作用。

这是一个关于如何在我的视图中创建对话框的工作示例

class MainScreenSelect : View("tool") {
override val root = vbox {
    dialog("dialog") {
    // Code how the dialog looks and how it behaves 
    }
  }
}

我的问题是,我不想在视图中创建对话框,我想在控制器中创建对话框。我将视图的 Vbox 分配给控制器内的一个变量,并想在控制器内创建对话框。

这就是我的视图

class MainScreenSelect : View("tool") {

private val controller : Controller by inject()
override val root = vbox {
    controller.vbox = this
    controller.showDialog()
  }
}

视图的 Vbox 被分配给控制器内部的一个变量,下一行应该创建一个对话框。

我的控制器看起来像这样

class ChatScreenController : Controller() {
var vbox : Vbox by singleassign()

fun showDialog(){
vbox.apply{
dialog{} // Here is the error, I can't call dialog at this point, but I can 
       // call it if I do vbox.apply inside the View
}
}

我的问题是,为什么我不能在我的控制器中创建对话框?我可以在 vbox.apply 中创建任何其他元素,例如另一个 vbox、按钮...,但没有对话框。我的错误在哪里?如何从控制器而不是视图创建对话框?

编辑:我已经尝试用

创建一个对话框
Dialog<R>().apply{
//CODE
}

这会创建一个对话框,但它不会锁定我的主屏幕以强制输入,而且我无法通过按 X 关闭此 window(说实话,我真的不知道我做了什么与对话框,但如果这是要走的路,我会研究它,如何使用这个对话框)

已解决:我的错误是,我认为 'dialog' 属于 UI 元素 vbox,但对话框与视图相关。将控制器内的变量更改为视图而不是 UI 元素使得可以为此视图创建对话框。

这是新控制器

class ChatScreenController : Controller() {
var view : View by singleassign()

fun showDialog(){
view.dialog{
// Code for the Dialog
}
}

需要更改View,将自身赋值给controller内部的变量view

class MainScreenSelect : View("tool") {

private val controller : Controller by inject()
override val root = vbox {
    controller.view = this@MainScreenSelect
    controller.showDialog()
}
}