如何在 JavaFX 中捕获 window 标题上的 single-click 或 double-click?

How to capture the single-click or double-click on window title in JavaFX?

众所周知,当用户 double-clicks 在 window 标题栏上时,window 会调整到可用的完整屏幕大小。至少我在 Mac OS 看到过这种情况。知道如何捕捉这个事件吗?我应该在我的代码中听什么,以便我知道用户有单身或 double-clicked Window 标题?

不要试图直接拦截与 Window 装饰的交互

不要尝试使用点击。处理由于键盘或 window 装饰交互引起的状态变化因操作系统而异,无论如何都不是 JavaFX 函数。

使用舞台属性并 API 代替

阶段有 maximized property (and iconifed), listen for changes on relevant properties. Similarly, there is a full screen mode which is a bit different (see Stage Java doc).

创建自己的 window 装饰品

如果您真的想要完全控制,可以使用未修饰的舞台样式并在 JavaFX 中添加您自己的修饰以处理基本的 window 系统功能。这样,许多装饰功能就可以由您的应用程序在内部处理,但我真的不推荐这样做。如果您想走那条路,有一个名为 Undecorator 的旧项目可以帮助您完成此操作(我不建议您自己编写代码)。

正如@jewelsea 在他的评论中提到的那样,捕获点击是一个坏主意。问题的目的是要知道为什么会出现这种行为。经过研究,我发现这是一个 Oracle 已经列出的错误 - 请在下面找到:标题栏上的每个 window when double-clicked is expected to assume full-screen height and width (Maximised)并且在 double-clicking 标题栏上再次应该恢复到以前的大小。这在 JDK8 之外不起作用是我从这个 link 中了解到的。但是,在 macOS Monterey 12.1 (OpenJDK 17) 上,window 假设标题栏上的 double-clicking 尺寸最大化,但是当再次 double-clicking 时,无法返回到之前的尺寸。

https://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8232812