【问题标题】:Java Swing HiDPI ScalingJava Swing HiDPI 缩放
【发布时间】:2022-02-13 22:46:39
【问题描述】:

我使用 Java 8 创建了一个程序,该程序在 Eclipse IDE 中使用了 Swing GUI。要将图像和图标缩放到适当的大小,它会获取并使用屏幕分辨率。在 Eclipse 中编译该程序后,该程序显示得非常好,并且一切似乎都按应有的方式运行。但是,当我将项目导出为“Runnable Jar”并运行程序时,图像缩放和程序外观都关闭了。

经过进一步调查,似乎可运行 jar 返回的屏幕分辨率恰好比 eclipse 中的分辨率低 2.5 倍(实际分辨率 - 3840x2160 与 1536x864)。互联网上有间接证据表明 Java 8 外观(或类似的东西)不支持 HiDPI 屏幕缩放。有一些分散的解决方案声称可以解决这个问题,比如更新到 8 之后的 Java 版本,或者通过向 jar 编译添加参数(无论这意味着什么)。这已经让 Java 新手感到困惑,而且在 Eclipse IDE 中运行/编译时完美显示的程序只会更加混乱。

我的问题是,是否有人知道如何使用 Swing 在 Java 中编译程序以在 HiDPI 屏幕上正确缩放,以及我需要遵循什么过程来编译工作程序?

编辑 1:有趣的是,在我的 Windows 设置中,“缩放和布局”、“更改文本、应用程序和其他项目的大小”设置为正好 250%,这意味着这个设置显然是我遇到的缩放问题的原因。有人知道如何从程序中绕过此设置,或者当我通过 Eclipse 运行它时为什么它会起作用?

【问题讨论】:

  • eclipse在launch配置中使用的参数有哪些?
  • 根据我的经验,第一个正确处理 HiDPI 屏幕的 Java 版本是 Java 12。尝试使用 Java 12 运行(无需编译)您的应用程序,看看是否有改进东西。
  • 据我所知,Eclipse 在运行程序@ThorbjørnRavnAndersen 时没有使用任何参数(参数?)
  • @a_horse_with_no_name 出于某种原因,从我的系统中删除了所有其他版本的 java,而使用 Java 12 略有效果。突然,屏幕上文本的分辨率开始正确缩放到正确的大小,但屏幕分辨率不正确的问题仍然存在。
  • Eclipse 中用于启动程序的运行配置 是什么?从 Eclipse 菜单中选择 Run > Run Configurations...

标签: java swing hidpi


【解决方案1】:

Java 8 不支持高 DPI。在 Windows 上,它以 DPI 无感知模式运行,并依赖 Windows 将窗口位图拉伸到设置中为监视器设置的比例。这意味着应用程序的 UI 在高 DPI 显示器上显示时看起来很模糊。

Java 的更高版本、Java 11 及更高版本支持每个显示器的高 DPI 设置。您的应用程序的 UI 根据设置正确放大,文本保持清晰。为了使图标和图像保持清晰,您应该使用MultiResolutionImage 或其基本实现BaseMultiResolutionImage 来提供更高分辨率的替代方案。

您的图像不应基于屏幕分辨率,而应基于监视器的比例设置。比如一台1920×1080、150%比例的全高清显示器,有效分辨率是1280×720,就是Java给你报告的有效分辨率。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-28
    • 1970-01-01
    • 1970-01-01
    • 2019-09-18
    • 1970-01-01
    • 2016-03-12
    • 1970-01-01
    • 2019-05-04
    相关资源
    最近更新 更多