我是否可以在不更改系统的DPI设置的情况下设置Java Swing应用程序的DPI分辨率?

Dan*_*ski 9 java testing swing accessibility dpi

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

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

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

Joe*_*nza 5

不知道是否可能.外观和感觉必须支持它,据我所知,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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

  • 如果你的 UIManager 有不是 Strings 的键,那么这将抛出 ClassCastException 。 (2认同)