【问题标题】:Fonts and their sizes on different machines不同机器上的字体及其大小
【发布时间】:2013-08-27 22:30:59
【问题描述】:
我正在用 java 编写一个 gui PC 程序,我正在使用 Java Swing,问题是,对于给定的字体,具有给定的大小和样式,在给定的字符串上,我计算边界框(以像素为单位)某台机器,有没有可能在另一台机器上,对于完全相同的字体和完全相同的字符串,计算出的边界框会不同?
如果有可能(根据我在程序上得到的结果似乎是这种情况),那么我如何定义一个字体,对于给定的字符串,在每台可能的机器上,它将返回完全相同的边界盒子?
【问题讨论】:
标签:
java
swing
fonts
scalability
font-size
【解决方案1】:
你不能,因为渲染取决于几个因素:
- 字体本身:某些计算机可能没有您请求的字体,或者字体可能具有相同的名称,但内容不同。您可以通过在可部署包中嵌入自定义字体来避免这种情况。
- 屏幕分辨率:字体根据 DPI 中的屏幕分辨率进行渲染。在更高密度的屏幕上,字体会更大(以像素为单位),否则它们将无法阅读。例如,与分辨率为 72dpi 的普通屏幕相比,Apple 的视网膜显示器的分辨率接近 400dpi。一个 72px 高的字符串在普通屏幕上占 1 英寸,完全可读,而仅占 0.18 英寸,几乎不可读。
- 用户有权自定义其字体的大小。如果我是老花眼,我会想要更大的字体。
编辑
或者,您可以通过使用预渲染字符串(保存为光栅图形甚至 SVG 路径)来欺骗系统,但请注意我向您提出的问题。
【解决方案2】:
这是路口,设置:
-
原生操作系统,
-
观感
非常不同且太难的工作是根据屏幕比例(以像素为单位)更改字体,
任何更改都将在 UIManager 中进行迭代并更改 FontUIResources 的每个键