Skip to content

在 JavaFX27+ 环境中使用原生窗口装饰 - #6885

Open
Glavo wants to merge 5 commits into
HMCL-dev:mainfrom
Glavo:window
Open

Glavo wants to merge 5 commits into
HMCL-dev:mainfrom
Glavo:window

Conversation

@Glavo

@Glavo Glavo commented Sep 17, 2026

Copy link
Copy Markdown
Member

No description provided.

@github-actions github-actions Bot added the 500+ label Sep 17, 2026
@Glavo Glavo linked an issue Sep 17, 2026 that may be closed by this pull request
@Glavo

Glavo commented Sep 17, 2026

Copy link
Copy Markdown
Member Author

发现一个问题。启用系统原生装饰后窗口本身会变成白底,导致我们无法给窗口裁切圆角。我想想有什么解决办法吗。

Assisted-by: codex:gpt-6-astra
@3gf8jv4dv

Copy link
Copy Markdown
Contributor

Windows 11 感觉良好

@3gf8jv4dv

Copy link
Copy Markdown
Contributor

默认窗口大小可能要增大点,否则……

Image

…WM corner settings

Assisted-by: codex:gpt-6-astra
@3gf8jv4dv

Copy link
Copy Markdown
Contributor

系统深色模式、启动器深色模式,打开启动器会闪过一瞬白窗口。能否实现黑窗口呢?

@Glavo

Glavo commented Sep 17, 2026

Copy link
Copy Markdown
Member Author

系统深色模式、启动器深色模式,打开启动器会闪过一瞬白窗口。能否实现黑窗口呢?

看起来用户代码无法控制这个行为。

@Glavo

Glavo commented Sep 18, 2026

Copy link
Copy Markdown
Member Author

系统深色模式、启动器深色模式,打开启动器会闪过一瞬白窗口。能否实现黑窗口呢?

openjdk/jfx#2316

@fishdry1000

Copy link
Copy Markdown
output

这个pr顺带解决了能把窗口拖到任务栏下面然后拿不回来的问题

@ToobLac

ToobLac commented Sep 19, 2026

Copy link
Copy Markdown
Contributor

openjdk/jfx#2316

那岂不是要等到 JFX 28 才行

@ToobLac

ToobLac commented Sep 20, 2026

Copy link
Copy Markdown
Contributor
2026-09-20.21.17.47.mov

环境:macOS 26.6.2

目前来看这个功能还是很不完善

@3gf8jv4dv

Copy link
Copy Markdown
Contributor

我觉得在 Windows 11 上是一个质的改变。

不过……有做成选项的可能吗?

@ToobLac

ToobLac commented Sep 20, 2026

Copy link
Copy Markdown
Contributor

我觉得在 Windows 11 上是一个质的改变。

具体体现在什么地方呢?我手头没设备体验不了

不过……有做成选项的可能吗?

这个应该还是比较好实现的

@3gf8jv4dv

Copy link
Copy Markdown
Contributor

具体体现在什么地方呢?我手头没设备体验不了

  1. 我比较中意 Windows 11 的窗口风格和阴影效果。之前的窗口风格和阴影与 Windows 11 格格不入,现在和原生窗口一样的圆角和阴影看着很舒服。
  2. 之前的阴影是自绘的,截图不便,现在方便多了。可以参考我上面发的截图,和我以前发的截图进行比对。
  3. 之前的窗口动画是 Glavo 自己弄出来的,同样与 Windows 11 格格不入,甚至有一些怪癖。现在和原生窗口一致了。
  4. 如 fishdry1000 上面所述,解决了一些怪癖。
  5. 在原生窗口实现上,最大化/全屏功能得到了完善。双击标题栏最大化/还原,和原生窗口完全一致。印象中,之前应该有一些零散的对最大化/全屏功能的 吐槽 反馈。
    ……

总的来说,对 Windows 11 用户来说应该是个值得分享的事。

@3gf8jv4dv

Copy link
Copy Markdown
Contributor

Uhm,遗憾的是有一个和旧窗口不一样的行为。

app 内出现一个对话框时

  • 旧窗口可以拖曳窗口内、对话框以外的任何区域拖动窗口
  • 原生窗口无法拖动窗口

@fishdry1000

Copy link
Copy Markdown

当前的行为只会在手动使用 JFX27+ 环境中出现。希望能在第一次打开 HMCL 时自动下载 JFX 时就下载 JFX27,使用旧版本 JFX 时主动提示升级,因为正如 3gf8jv4dv 所说,使用原生窗口装饰在 Windows 上的体检提升明显。

@Glavo

Glavo commented Sep 20, 2026

Copy link
Copy Markdown
Member Author

不过……有做成选项的可能吗?

可能会引入一个环境变量来控制行为。

我计划默认情况下 HMCL 会探测当前环境是否满足一个保守的条件(系统为 Windows 或 macOS,对于 Windows 平台必须是浅色模式),此时才会启用原生窗口装饰。通过环境变量可以跳过这个检测,强制启用/禁止使用原生窗口装饰(当然必须满足 JavaFX 27+ 且关闭窗口透明这个硬性条件)。

Linux 平台看起来难以控制原生的窗口裁切,使用原生窗口装饰的话很难绘制圆角,所以默认不会启用这项功能。

@3gf8jv4dv

Copy link
Copy Markdown
Contributor

对于 Windows 平台必须是浅色模式

这个条件没必要吧,如果是窗口闪白还在接受范围内

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature Request] 使用原生窗口装饰

4 participants