5

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

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

4

2 回答 2

6

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

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

于 2011-08-15T02:05:24.750 回答
4

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

字符串宽度

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

于 2011-08-15T02:00:33.240 回答