(DPI) 在 Java Swing(和 Windows)中缩放字体
(DPI) Scaling fonts in Java Swing (and Windows)
我正在尝试手动缩放我的 Java Swing 应用程序中的某些字体(即,对于高分辨率屏幕)。
在 96 DPI (100%) 时,Windows 外观告诉我默认字体是 Tahoma 大小 11。(在 WLF 中使用 Label.font)
200% 是 21,300% 是 32,400% 是 43,500% 是 53。(注意点大小 == 字体上升)
我原来的做法是采用"my"默认字体:Tahoma size 11。然后计算比例因子(即2.0代表200%)。从那里我想计算字体磅值,但是直接乘法不符合 Windows 缩放,
所以问题:
- 字体缩放在 Windows 中如何工作?
和
如何缩放字体? (还有对组件等进行的其他缩放)
我的应用程序中的两种主要字体是 Tahoma(11) 和 Segoe UI (12).
new WindowsLookAndFeel().getDefaults().getFont("Label.font") //returns 11 @ 100%
Font font = StyleContext.getDefaultStyleContext().getFont("Tahoma", Font.PLAIN, 11); //my inital Composite font (Tahoma with Dialog fallback)
Font newFont = font.deriveFont(zoomFactor * 11); // this gets me 22 @ 200%
谢谢!
在我的例子中,我的解决方案是遍历每个字体大小并检查测试字符串的宽度,并在最接近(但不大于)缩放后的宽度大小的字体处停止。
这类似于根据特定组件的大小调整字体大小。需要注意的一点是,我必须为测试字符串选择一个相对较长的字符串。
按照此方法,选择 Tahoma 21 作为 200% (192 DPI) 的正确字体。大致如下:
while(true) {
Font newFont = font.deriveFont((float)fontSize + 1);
int newWidth = StyleContext.getDefaultStyleContext().getFontMetrics(newFont).stringWidth(TEST_STIRNG);
if(newWidth <= targetWidth) {
fontSize++;
} else {
System.out.println("Rejected Font:" + newFont.getName() + " size:" + newFont.getSize() + " width: " + newWidth);
break;
}
}
我正在尝试手动缩放我的 Java Swing 应用程序中的某些字体(即,对于高分辨率屏幕)。
在 96 DPI (100%) 时,Windows 外观告诉我默认字体是 Tahoma 大小 11。(在 WLF 中使用 Label.font) 200% 是 21,300% 是 32,400% 是 43,500% 是 53。(注意点大小 == 字体上升)
我原来的做法是采用"my"默认字体:Tahoma size 11。然后计算比例因子(即2.0代表200%)。从那里我想计算字体磅值,但是直接乘法不符合 Windows 缩放,
所以问题:
- 字体缩放在 Windows 中如何工作? 和
如何缩放字体? (还有对组件等进行的其他缩放) 我的应用程序中的两种主要字体是 Tahoma(11) 和 Segoe UI (12).
new WindowsLookAndFeel().getDefaults().getFont("Label.font") //returns 11 @ 100% Font font = StyleContext.getDefaultStyleContext().getFont("Tahoma", Font.PLAIN, 11); //my inital Composite font (Tahoma with Dialog fallback) Font newFont = font.deriveFont(zoomFactor * 11); // this gets me 22 @ 200%
谢谢!
在我的例子中,我的解决方案是遍历每个字体大小并检查测试字符串的宽度,并在最接近(但不大于)缩放后的宽度大小的字体处停止。
这类似于根据特定组件的大小调整字体大小。需要注意的一点是,我必须为测试字符串选择一个相对较长的字符串。
按照此方法,选择 Tahoma 21 作为 200% (192 DPI) 的正确字体。大致如下:
while(true) {
Font newFont = font.deriveFont((float)fontSize + 1);
int newWidth = StyleContext.getDefaultStyleContext().getFontMetrics(newFont).stringWidth(TEST_STIRNG);
if(newWidth <= targetWidth) {
fontSize++;
} else {
System.out.println("Rejected Font:" + newFont.getName() + " size:" + newFont.getSize() + " width: " + newWidth);
break;
}
}