12

我有一个使用 Windows 作为目标平台的 Substance LookAndFeel 的 Java 应用程序,我想在更改系统设置的情况下增加我的应用程序的 DPI 设置。

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

PS:我知道 Substance LaF 允许在运行时缩放字体大小,但这样只会缩放控件的高度,而不是宽度。我希望我的 GUI 完全缩放,因为如果我设置系统的 DPI 设置会发生这种情况。

4

3 回答 3

6

不知道这是否可能。外观必须支持它,据我所知,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);
    }
}

我想你可以更进一步,并按比例重新定义比例边界,但这很快就会变得非常复杂

于 2009-11-12T19:48:22.217 回答
2

所以实际的答案似乎是:不,你不能。这真的很糟糕,因为测试起来很痛苦。

于 2010-03-05T09:06:03.183 回答
1

是的,您可以,但您需要在JRE 9上运行它。

这是因为 Java 运行时声明自己是“DPI 感知的”,但对于 AWT 和 Swing 并不真正支持它。Java 应用程序的大小和渲染基于像素而不是适当缩放,这包括 HiDPI 显示。无论如何,最近已经解决了这个问题。请参阅问题JEP 263:Windows 和 Linux 上的 HiDPI 图形升级

所以,增加字体大小是行不通的(因为它不会增加其余的东西);jvm 参数-Dsun.java2d.dpiaware=false不起作用(因为它不被真正支持);并且清单文件+注册表编辑(对于Windows)不起作用。

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

于 2017-08-01T00:02:11.410 回答