如何使 main javafx window 在 MacOS 中从全屏模式返回时仍可调整大小

How to make main javafx window still resizable coming back from full screen mode in MacOS

此问题与 MacOS 上的 JavaFX (jdk-9.0.1) 有关(I 运行 Sierra)。我正在开发一个 x 平台桌面应用程序,其主程序 window primaryStage.setResizable(true) 可调整大小,单击绿色小按钮 see picture below 后进入全屏模式,然后再次返回在正常模式下,window 的大小调整将不再可能。在 MacOS 上从全屏模式返回后如何让它仍然可以调整大小?它适用于 Windows 和 Linux 但不适用于 MacOS。非常感谢任何帮助。

编辑 1:该问题现已在 bugs.java.com 上的以下 url JDK-8191885

中报告并可见

这看起来像是 JavaFX 中的错误。我可以使用 JDK9 和 10ea 重现此行为。它似乎仍然适用于最新的 JDK8。我还没有找到任何解决方法。您应该在 http://bugreport.java.com/

报告此事

由于甚至没有计划在 Java 11 之前修复此错误,我们可能不得不忍受它很长一段时间。因此,我试图为它找到某种解决方法,这里是:

添加此代码或与您的代码类似的内容。

primaryStage.maximizedProperty().addListener((v,o,n) -> {
    primaryStage.setResizable(false);
    primaryStage.setResizable(true);
});

一旦您通过绿色按钮 de-maximized 您的舞台,您仍然需要手动做的唯一一件事就是单击舞台的标题栏并将其移动几个像素。之后,舞台应该像往常一样再次用鼠标调整大小。这是一个令人讨厌的黑客攻击,但总比永远忍受这个错误要好。

谢谢米帕!我发现向 fullScreenProperty() 添加一个监听器会更好,这样您就不必单击标题栏并将其移动几个像素。关键是 setResizable(false) 之后是 setResizable(true),感谢您发现了这一点。在错误修复之前,我将继续使用此解决方法:

    primaryStage.fullScreenProperty().addListener((v,o,n) -> {

        if (!primaryStage.isFullScreen()) {

            primaryStage.setResizable(false);
            primaryStage.setResizable(true);
        }
    });