我使用Java 8创建了一个程序,它在Eclipse中使用了Swing GUI。若要将图像和图标缩放到适当的大小,则获取和使用屏幕分辨率。在Eclipse中编译程序时,程序显示得非常好,一切似乎都正常运行。但是,当我将项目导出为"Runnable“并运行该程序时,图像缩放和程序外观都被关闭了。
经过进一步研究,看来运行的jar返回的屏幕分辨率比eclipse中的分辨率低2.5倍(即实际分辨率- 3840x2160 vs 1536x864)。互联网上有间接证据表明,Java8的外观和感觉(或类似的东西)不支持HiDPI屏幕缩放。有一些零散的解决方案声称可以解决这个问题,比如更新到8以后的Java版本,或者通过在jar编译中添加参数(不管这意味着什么)。对于一个Java新手来说,这已经是令人困惑的了,只有当在Eclipse中运行/编译时,这个程序才会被完美的显示而变得更加混乱。
我的问题是,是否有人知道如何使用Swing在HiDPI屏幕上使用Swing编译程序,以及我需要遵循什么过程来编译一个工作程序?
编辑1:有趣的是,在我的Windows设置中,“缩放和布局”、“更改文本、应用程序和其他项目的大小”被设置为精确的250%,这意味着这个设置显然是我遇到的缩放问题的原因。有人知道如何从程序中绕过这个设置吗?或者当我在Eclipse中运行它时,它为什么会工作?
发布于 2022-02-13 14:46:39
Java 8不支持高新闻部。在Windows上,它以DPI不知情模式运行,并依赖Windows将窗口位图拉伸到设置中监视器的比例设置。这意味着应用程序的UI在高DPI监视器上显示时看起来很模糊。
Java、Java 11及更高版本的后期版本,支持每个监视器的高DPI设置.您的应用程序的UI是正确的规模,根据设置,文本保持清晰。为了使图标和图像保持清晰,您应该使用MultiResolutionImage或其基本实现BaseMultiResolutionImage来提供更高分辨率的替代方案。
不应基于屏幕分辨率,而应根据监视器设置的比例来确定图像。例如,一个全高清显示器1920×1080与150%的比例,有有效的分辨率1280×720,它是有效的分辨率,Java向您报告。
https://stackoverflow.com/questions/56618089
复制相似问题