代码之家  ›  专栏  ›  技术社区  ›  CodeClown42

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

  •  0
  • CodeClown42  · 技术社区  · 5 年前

    我在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() 它做的事情基本相同,只是没有任务栏图标。此外,在它应该位于的位置(位于主窗口的中心)有一条一到两个像素厚的可见垂直线。更有趣的是 第二个关闭按钮 显示在主窗口的标题栏中:

    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!") }    
    

    结果与YNdialog相同 initOwner() .

    我是不是遗漏了什么?这一切我都是直接从 the docs .我已经完成了自定义弹出窗口(通过 FXMLLoader )对此没有任何问题。这种经历是否意味着在这种情况下对话框层次结构有问题,我应该自己滚动?

    0 回复  |  直到 5 年前
    推荐文章