如何在 Linux 中修复基于 Java 的应用程序在高 DPI 显示器上的缩放?

问题描述 投票:0回答:3

我刚刚切换到 Java 11 (AdoptOpenJDK),以便我的 Java Swing 应用程序在不同系统缩放设置下的高 DPI 显示器上看起来不错。

在 Windows 上运行正常。无论系统上配置的缩放值如何,Java 都会自动检测并使用它相应地缩放 GUI。

然而,在 Linux 上,GUI 不考虑系统缩放,因此,它在高 DPI 显示器上看起来很小。

在这里阅读了一些帖子后,我发现我可以指示 Java 使用什么缩放值。例如,如果系统缩放比例为 200%,那么我可以将以下命令行参数添加到用于启动应用程序的 java 命令中。

-Dsun.java2d.uiScale=2.0

当我添加上述命令行选项时,GUI 在 Linux 上看起来不错。

我还读到我可以设置 GDK_SCALE 环境变量。

但是,我想找到更好的解决方案。理想情况下,我不需要指定要使用的缩放值。有人知道这是否可能吗?

如果以上不可能,那么我想我的下一步将是在 Linux 中提出一个命令,该命令返回当前系统缩放值是什么,并用它来设置

sun.java2d.uiScale
选项。

java linux swing scaling highdpi
3个回答
0
投票

除了所有 gui 组件的一组预制比例和数学缩放之外,您可以使用 borderlayout 调整组件大小,使用 gridbaglayout 定位组件,然后只有字体和图像需要数学调整大小。

图形设备和图形环境类 回复:java.awt.GraphicsConfiguration。 getBounds()


0
投票

您可以使用名为jHiccup的第三方工具。它可以自动检测系统的定标值。然后,使用它可以修复 GUI。

例如,

获取缩放值

double dpiScaling = Toolkit.getDefaultToolkit().getScreenResolution() / 96.0;

设置比例因子

JHiccup.setScaleFactor(dpiScaling);

您可以查看 jHiccup 的文档。

参考 - https://docs.azul.com/prime/jHiccup


-4
投票

你可以试试这个:

-Dsun.java2d.ddscale=true

正如官方文档所说:

如果正在使用 DirectDraw/Direct3D 管道,将此标志设置为 true 可启用硬件加速缩放。默认情况下禁用 DirectDraw/Direct3D 硬件缩放以避免在现有应用程序中呈现伪影。

有关系统属性的更多信息,您可以查看官方Oracle文档

© www.soinside.com 2019 - 2024. All rights reserved.