我在Fedora 33(GNU/Linux)上使用JFX 11和Xorg GUI服务器(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!") }
结果与YNdialog相同
initOwner()
.
我是不是遗漏了什么?这一切我都是直接从
the docs
.我已经完成了自定义弹出窗口(通过
FXMLLoader
)对此没有任何问题。这种经历是否意味着在这种情况下对话框层次结构有问题,我应该自己滚动?