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

Dom*_*chi 5 java fonts swing fontmetrics

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

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

Ted*_*opp 6

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

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


Joe*_*oel 5

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

字符串宽度

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