不同机器上的字体及其大小

时间:2013-08-25 08:31:43

标签: java swing fonts scalability font-size

我正在用java编写一个gui PC程序,我正在使用Java Swing,问题是,对于给定的Font,给定的字符串和样式,我计算边界框(以像素为单位)有些机器,是否有可能在其他机器上,对于完全相同的Font和完全相同的String,计算出的边界框会变得不同?

如果有可能(根据我在程序中得到的结果似乎就是这种情况),那么如何定义一个字体,对于给定的字符串,在每个可能的机器中,它将返回完全相同的边界箱?

2 个答案:

答案 0 :(得分:2)

你不能,因为渲染取决于几个因素:

  1. 字体本身:某些计算机可能没有您请求的字体,或者字体可能具有相同的名称,但其实质不同。您可以通过在可部署包中嵌入自定义字体来避免这种情况。
  2. 屏幕分辨率:字体根据DPI中的屏幕分辨率进行渲染。在具有更高密度的屏幕上,字体将更大(以像素大小),因为否则它们将是不可读的。例如,想想Apple的视网膜显示器,其分辨率接近400dpi,而普通屏幕的分辨率为72dpi。一个72px高的字符串在普通屏幕上占用1英寸,完全可读,而只占用0.18英寸,难以读取。
  3. 用户有权自定义字体大小。如果我是老花眼,我会想要更大的字体。

  4. 编辑

    或者,您可以通过使用预渲染字符串(保存为光栅图形甚至SVG路径)来欺骗系统,但要注意我向您展示的问题。 p>

答案 1 :(得分:1)

这是交集,设置:

  1. 原生OS,

    • 可访问,instaled字体(Native OS使用不同的字体,大小,粗体....)

    • theme in Native OS

    • 用于主题的字体(其属性)

    • 各种用户设置,海关主题

    • idiotics自定义应用程序,可以更改Native OS中的全局属性,而不是应用程序设置

  2. 的LookAndFeel

    • L& F使用自己的字体,不同

    • 默认情况下与Native OS相同的选项

    • i ****自定义应用程序,可以更改Native OS中的全局属性.....

  3. 非常不同,太难以根据屏幕比例(以像素为单位)更改字体,

  4. 任何更改都将在UIManager中进行迭代并更改FontUIResources的每个键