Java:你如何找出字体的高度和x高度?

时间:2011-06-01 14:00:18

标签: java fontmetrics

FontMetrics没有cap heightx-height字体的getter。

如何获取这些值?

就封顶高度而言,无法保证特定大写字母的字母上升与封顶高度相同。 (例如,资本H不保证在顶部是平的)

就x高度而言,我认为它的可能与“x”的高度相同,但同样,不能保证。


编辑:Grr!我只是尝试了FontMetrics.getBounds()FontMetrics.getLineMetrics()来获取特定的字符序列,并且我总是得到相同的高度答案(getBounds()的宽度确实不同)。 hasUniformLineMetrics()方法中有一个关于fontmetrics的注释,其中包含多种字体来覆盖字符集,但它涵盖了字符组,而不是单个字符。

4 个答案:

答案 0 :(得分:4)

您正在寻找的是屏幕渲染框,它会告诉您文本的确切大小。

这意味着您需要在某些方面提供有关您正在绘制的曲面和您正在绘制的字符串的信息。原因是系统直到渲染后才知道视觉结果。我用过:

Graphics2D g;
g.getFont().createGlyphVector(g.getFontRenderContext(),"abc").getVisualBounds();

您也可以尝试:

Graphics2D g;
g.getFont().getMaxCharBounds(g.getFontRenderContext());

我也无法直接保留所有这些字体方法。

答案 1 :(得分:0)

我没有使用它,但GlyphView.GlyphPainter类有getAscentgetDescentgetHeight方法。这可能是值得一试的。

答案 2 :(得分:0)

好吧,如果您正在尝试制作一个包含适合文字的文字的方框,我认为您可以将高度设为字体大小本身

我不确定,但我认为这就是我过去所做的事情

答案 3 :(得分:0)

至于x-height,以下代码对我来说很好:

    public double getXHeight(Font font)
    {
        FontRenderContext fc = new FontRenderContext(null, false, false);
        TextLayout layout = new TextLayout("x", font, fc);
        return layout.getBounds().getHeight();
    }