如何在 Windows/Linux 上设置 Java Swing 应用程序的 DPI?

新手上路,请多包涵

如果你有一台 DPI 超过 150 的显示器(比如 Macbook Pro),你可能也会发现问题: Java Swing 应用程序上的字体对于高 DPI 显示器来说太小了,而且我根本无法更改字体大小(它直接忽略 Windows DPI,只显示 最原始的 DPI–>96 )。我只能更改屏幕分辨率,这绝对会使 LCD 上的所有内容变得模糊。

是的,我有一台带高 DPI 显示器的笔记本电脑,15.6’,分辨率为 1920x1080,一些 Java 桌面应用程序在我的笔记本电脑上看起来很小,例如 Matlab、Burpsuite 等。我已经在互联网上搜索了很长时间,但是仍然找不到解决问题的方法。我知道我可以通过 JRE_HOME/lib/font/fontconfig.properties.src 更改 JRE 字体,但我找不到任何地方来设置 Java 桌面字体的默认字体大小或 DPI。

问题没有解决办法吗?你有高 DPI 显示器吗?您如何使用此类应用程序? Swing是否放弃高DPI用户?

原文由 Searene 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.2k
2 个回答

我目前正在 Windows 上调查此问题。这是我发现的:

大多数 Swing Look & Feels 根本不支持高 DPI,甚至 Nimbus 也不支持,尽管它应该是可扩展的。我发现一些旧的博客文章说 Nimbus 最终可能会提供高 DPI 缩放,但显然这从未发生过。

一个例外是系统 LAF,但在所有 DPI 设置下,其默认字体比实际系统字体大小小 10%。此外,必须按照此处所述明确选择系统:http: //docs.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html

您也没有可以在 Swing 中设置的单一比例因子。特定的 LAF 必须提供代码来处理缩放。所以你能做的最好的就是选择系统并希望它足够好。

但是,JavaFX 在我的系统上会正确地自动扩展到 150%。如果可能的话,我建议您使用 JavaFX 来构建您的 GUI。

编辑:我制作了几个小测试程序,并对各种 GUI 框架、Swing 主题和 DPI 设置进行了比较截图。这可能对阅读此问题的人有用:http: //kynosarges.org/GuiDpiScaling.html

原文由 user574171 发布,翻译遵循 CC BY-SA 3.0 许可协议

简短回答:您需要在 JRE 9+ 上运行它。

长答案:

这是因为 Java 运行时声明自己是“DPI 感知的”,但实际上并不支持 AWT 和 Swing。 Java 应用程序的大小和呈现基于像素而不是适当缩放,这包括 HiDPI 显示器。无论如何,这最近已经解决了。请参阅问题 JEP 263:Windows 和 Linux 上的 HiDPI 图形 以及 升级

所以,增加字体大小是行不通的(因为它不会增加其余的东西); jvm 参数 -Dsun.java2d.dpiaware=false 不起作用(因为它实际上不受支持);并且清单文件 + 注册表编辑(对于 Windows)不起作用。

解决方案:你需要在 JRE 9+ 上运行它,因为它确实支持这个特性。

原文由 Sergio Muriel 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题