可以设置我的Java Swing应用程序的DPI分辨率不改变系统DPI设置?(Can I set t

2019-07-29 21:33发布

我已经使用了Windows的物质的LookAndFeel作为目标平台的Java应用程序,我想提高我的应用程序的DPI设置改变系统设置。

我想这样做,因为我不想强迫用户重新启动Windows,因为许多Windows应用程序似乎都非常高DPI设置的问题(> 120)

PS:我知道,这种物质的LaF允许扩展在运行时的字体大小,但这样只是我的控制高度缩放,不宽。 我想我的GUI完全缩放,如果我设置了系统的DPI设置会发生这种事。

Answer 1:

不知道这是可能的。 外观和感觉必须支持它,而且据我所知,Windows的外观和感觉没有。 下面是你可以考虑黑客攻击:通过你的外观和感觉定义的所有字体修改并重新定义它们的性能稍微更大。 下面的代码片段,这是否:

for (Iterator i = UIManager.getLookAndFeelDefaults().keySet().iterator(); i.hasNext();) {
    String key = (String) i.next();
    if(key.endsWith(".font")) {
        Font font = UIManager.getFont(key);
        Font biggerFont = font.deriveFont(2.0f*font.getSize2D());
        // change ui default to bigger font
        UIManager.put(key,biggerFont);
    }
}

我想你可能会进一步采取这一个步骤,并且重新定义了边界规模的比例为好,但变得非常复杂,非常快



Answer 2:

所以实际的答案似乎是:不,你不能。 这确实是一个坏消息,因为这是一个痛苦的考验。



Answer 3:

是的,你可以,但你需要在运行JRE 9 。

这是因为Java运行时宣布自己是“DPI感知”,但并没有真正支持它AWT和Swing。 Java应用程序施胶并且呈现基于而不是正确缩放的像素,这包括HiDPI显示。 不管怎么说,这是最近解决。 见问题JEP 263:HiDPI显卡在Windows和Linux和升级 。

因此,增加了字体大小不工作(因为它不会增加的剩下的事情); 在JVM参数-Dsun.java2d.dpiaware=false不工作(因为它不是真正的支持); 和清单文件+注册表编辑(适用于Windows)是行不通的。

解决方法:您需要在JRE 9运行它,因为它确实支持此功能。



文章来源: Can I set the DPI resolution of my Java Swing application without changing the systems' DPI setting?