如何解决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()
时,它的作用大致相同,只是它没有任务栏图标。此外,有一条可见的垂直线一到两个像素粗,它应该在(以主窗口为中心)。更有趣的是第二个关闭按钮出现在主窗口的标题栏中:
这不是 javafx 界面的一部分,但我以前从未见过窗口管理器 (?) 这样做过。
偶尔(可能是五分之一或十次)对话框确实出现,而且奇怪的是, 关闭按钮有第二个的空间偏移:
当发生这种情况并且我可以关闭对话窗口时,主窗口上的第二个关闭按钮就会消失。
使用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 举报,一经查实,本站将立刻删除。