对话框window定位

Dialog window positioning

我正在 TornadoFX 中创建一个小型非模态对话框,如下所示:

find<Grib>(scope).apply { openModal(block = true,
                          owner = FX.primaryStage,
                          stageStyle = StageStyle.UTILITY,
                          modality = Modality.NONE) }

我该如何设置(和检索)它的 window 位置以备后用?也就是说,我有一个 window 位置的首选项对象,我想更新它,以便下次用户打开 window 时,它会在上次关闭它的同一位置打开。

通过挖掘一些 TornadoFX 源代码,我基本上能够解决我的问题。

我将其添加到我的 init{} 函数中:

Platform.runLater {
    root.scene.window.x = Main.preferences.getDouble(GRIB_WINDOW_X, 400.0)
    root.scene.window.y = Main.preferences.getDouble(GRIB_WINDOW_Y, 400.0)
}

然后将其添加到我的 close() 函数中:

Main.preferences.putDouble(GRIB_WINDOW_X, root.scene.window.x)
Main.preferences.putDouble(GRIB_WINDOW_Y, root.scene.window.y)

这个 "mostly" 解决了 save/restore window 位置的问题,但是 window 在创建时会闪烁,因为它会从某个默认位置移动到新设置的位置。