FontMetrics.stringWidth()和FontMetrics.getStringBounds()之间有什么区别?

时间:2011-08-15 01:56:05

标签: java swing fonts fontmetrics

我需要找到屏幕上绘制的文本的宽度。 This thread表明FontMetrics.stringWidth()有时不如FontMetrics.getStringBounds()准确。

有谁知道这是否正确,如果是,那么这种差异在哪种情况下可见? FontMetrics.stringWidth()似乎更频繁地使用,包括在SwingUtilities.computeStringWidth()中。此外,明显的优点是它不需要Graphics对象,但这本身结合了在Graphics对象中定义抗锯齿和类似设置的事实可能解释为什么FontMetrics.getStringBounds()可能更准确。

2 个答案:

答案 0 :(得分:6)

getStringBounds有更多信息可以使用,因为它传递了一个Graphics。它可以用它来计算子像素字形位置并考虑抗锯齿对字形大小的影响。来自FontRenderContext的文档:

  

由于四舍五入到像素边界,应用程序指定的抗锯齿和小数量度量也会影响字符的大小。

答案 1 :(得分:4)

我认为答案就在你的问题中。来自javadocs:

  
    

stringWidth

         

请注意,此方法返回的总前进宽度不考虑渲染上下文。因此,抗锯齿和分数度量提示可以影响提前的价值。启用抗锯齿和小数度量标准提示时,请使用getStringBounds(String,Graphics)而不是此方法。字符串的前进不一定是字符前进的总和。