Java FX 对话框“出现”没有大小

问题描述

我在 Fedora 33 (GNU/Linux) 上使用 JFX 11 和 Xorg GUI 服务器 (v 1.20.11),从而创建一个对话框 (kotlin):

fun YNdialog (txt : String) : Boolean {
    val dlog = Dialog<ButtonType>()
    dlog.dialogPane.apply {
        contentText = txt
        buttonTypes.apply {
            add(ButtonType.OK)
            add(ButtonType.CANCEL)
        }
        minWidth = 200.0
        minHeight = 100.0
    }
    dlog.initOwner(theStage.scene.window)
    val r = dlog.showAndWait()
    return r.isPresent && r.get() == ButtonType.OK
}

这是从与 EventHandler<ActionEvent> 关联的 Button 调用的:

if (YNdialog("hello world")) ...

似乎确实创建了一个窗口。如果我删除 initOwner() 调用,它的图标会出现在桌面任务栏 (KDE) 中,允许我执行诸如移动它之类的操作,但是“最大化”和“调整大小”会变灰,并且会出现鼠标光标不拖动任何东西,即它没有宽度或高度。

使用 initOwner() 时,它的作用大致相同,只是它没有任务栏图标。此外,有一条可见的垂直线一到两个像素粗,它应该在(以主窗口为中心)。更有趣的是第二个关闭按钮出现在主窗口的标题栏中:

enter image description here

这不是 javafx 界面的一部分,但我以前从未见过窗口管理器 (?) 这样做过。

偶尔(可能是五分之一或十次)对话框确实出现,而且奇怪的是, 关闭按钮有第二个的空间偏移:

enter image description here

当发生这种情况并且我可以关闭对话窗口时,主窗口上的第二个关闭按钮就会消失。

使用Alert

将该函数等替换为:

Alert(Alert.AlertType.CONFIRMATION,"hello world").showAndWait() 
    .filter { res -> res == ButtonType.OK }                      
    .ifPresent { _ -> log.msg("ok!") }    

结果与带有 initOwner() 的 YNdialog 相同。

在这里遗漏了什么吗?我几乎直接从 the docs 那里得到了所有这些。我已经完成了自定义弹出窗口(通过 FXMLLoader 实例化)并且没有任何问题。这种体验是否意味着在这种情况下对话层次结构有问题,我应该自己动手?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)