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

标签 java swing testing accessibility dpi

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

我想这样做是因为我不想强制用户重新启动 Windows 并且因为许多 Windows 应用程序似乎在非常高的 DPI 设置 (> 120) 下出现问题

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

最佳答案

不知道这是否可行。外观必须支持它,据我所知,Windows 外观不支持。这里有一个你可能会考虑的 hack:遍历你的外观和感觉中定义的所有字体,并将它们重新定义为稍微大一点。这是执行此操作的代码片段:

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);
    }
}

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

关于java - 我可以在不更改系统 DPI 设置的情况下设置 Java Swing 应用程序的 DPI 分辨率吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1102216/

相关文章:

java - 学习 Swing 和 Jframe 之类的东西 - 还想了解一些有关组织的提示和技巧

reactjs - 使用 enzyme 测试重组 - 访问 Prop 问题

java - 构造函数加载时显示加载栏

java线程和jtabbedpane

java - 通过 processbuilder 进行多进程通信,卡住在 BufferedReader() 的 readline() 处

Java计算最长可能的数组

angularjs - 使用 $location 和 $routeParams 等依赖项测试 Angular 指令

javascript - 我如何在 TestCafe 中使用/打印通用属性内的值

java - : binary,解释、执行、编译这几个概念之间有什么关系?

java - Apache xmlconfig xpath 不读取元素