我刚刚切换到 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
选项。
除了所有 gui 组件的一组预制比例和数学缩放之外,您可以使用 borderlayout 调整组件大小,使用 gridbaglayout 定位组件,然后只有字体和图像需要数学调整大小。
图形设备和图形环境类 回复:java.awt.GraphicsConfiguration。 getBounds()
您可以使用名为jHiccup的第三方工具。它可以自动检测系统的定标值。然后,使用它可以修复 GUI。
例如,
获取缩放值
double dpiScaling = Toolkit.getDefaultToolkit().getScreenResolution() / 96.0;
设置比例因子
JHiccup.setScaleFactor(dpiScaling);
您可以查看 jHiccup 的文档。
你可以试试这个:
-Dsun.java2d.ddscale=true
正如官方文档所说:
如果正在使用 DirectDraw/Direct3D 管道,将此标志设置为 true 可启用硬件加速缩放。默认情况下禁用 DirectDraw/Direct3D 硬件缩放以避免在现有应用程序中呈现伪影。
有关系统属性的更多信息,您可以查看官方Oracle文档。