Java 如何确保Stage作为窗口而不是选项卡打开?

Java 如何确保Stage作为窗口而不是选项卡打开?,java,javafx,Java,Javafx,新的阶段传统上是作为新窗口打开的。然后MacOS出现并在(系统首选项->常规)中介绍了这一点: 现在,我所有的新JavaFX阶段都以新选项卡的形式在第一个打开的阶段的顶部打开。如果更改系统设置,阶段将再次作为windows打开。但我更喜欢将系统设置为“始终”,因为这是PDF和其他文档在选项卡中打开的唯一方式。如何覆盖JavaFX应用程序中的系统设置并恢复旧窗口?如建议,a可能有特定的阶段样式,模式和所有者。如前所述,StageStyle.UTILITY“具有纯白背景和最少平台装饰的舞台”达到了

新的阶段传统上是作为新窗口打开的。然后MacOS出现并在(系统首选项->常规)中介绍了这一点:

现在,我所有的新JavaFX阶段都以新选项卡的形式在第一个打开的阶段的顶部打开。如果更改系统设置,阶段将再次作为windows打开。但我更喜欢将系统设置为“始终”,因为这是PDF和其他文档在选项卡中打开的唯一方式。如何覆盖JavaFX应用程序中的系统设置并恢复旧窗口?

如建议,a可能有特定的
阶段样式
模式
和所有者。如前所述,
StageStyle.UTILITY
“具有纯白背景和最少平台装饰的舞台”达到了预期效果

stage.initStyle(StageStyle.UTILITY)
新的(可能的)解决方案:升级到JavaFX17+7或更高版本


几周后,他们回复了邮件列表,并整合了一个可以看到的变化。我自己还没有完全测试过它。

我不使用MacOS,但我认为这是不可能的,因为管理windows是操作系统的工作,而不是您的应用程序。你的覆盖实际上是告诉用户你比他们更了解,因为他们选择将窗口作为选项卡打开。我在苹果支持论坛上这样做,询问如何在每个应用的基础上管理选项卡/窗口行为。在那里,我的第一个反应来自VikingOSX,他说“在单独的应用程序中,如果它被设计为允许该功能的话”,这意味着他和你有着极为相反的理论(由每个应用程序自己管理该行为)。此外,在我的JavaFX应用程序中,我使用了一个对话框。对话框不是文档,当然,它们应该作为弹出窗口打开,对吗?但是,如果您在macOS中将系统设置设置为“始终”,JavaFX对话框将在选项卡中打开。更改
阶段样式
模式
或新
阶段
的所有者是否会改变什么?也许
initOwner(null)
?@trashgood
initStyle(StageStyle.UTILITY)
有效。请随意写下来作为答案,我会结束这个。谢谢这是最有用的答案。这确实可以确保阶段作为窗口而不是选项卡打开。但是,它也会从windows标题栏中删除隐藏和全屏按钮。我已经联系了JavaFX开发者,看看是否有更好的解决方案,并将用我学到的任何东西来更新它。@MattGroth:谢谢。这似乎是macOS 11 Big Sur(V10.16),您是否尝试过macOS上支持的
StageStyle.UNIFIED
。对话框窗口将作为选项卡打开。更新:感谢您的关注。读者是否可以推断这可能包含在JavaFX11中?我不确定。但是,提交消息中确实显示了“Backport”及其在“openjfx11更新”repo中的位置。