确定JavaFX字体

时间:2016-12-26 21:28:49

标签: java javafx

我有一个Font对象,我需要字体的宽度和高度。我知道getSize()会将字体的高度返回为point-size of a font is generally the height,但在确定字体宽度方面我感到很茫然。

或者,能够确定字体支持的每个特定字符的宽度也是一种可接受的解决方案。

我最好的猜测是在使用loadFont方法时指定了宽度,但文档没有指定size参数是表示字体的宽度还是高度。

所使用的所有字体都是单空格字体,例如 DejaVu Sans Mono GNU FreeMono Lucida Sans Unicode

2 个答案:

答案 0 :(得分:3)

我遇到了同样的问题,似乎没有简单的方法。我的解决方案是使用正确的字体创建一个Text元素并检查它的大小:

double computeTextWidth(Font font, String text, double wrappingWidth) {
    Text helper = new Text();
    helper.setFont(font);
    helper.setText(text);
    // Note that the wrapping width needs to be set to zero before
    // getting the text's real preferred width.
    helper.setWrappingWidth(0);
    helper.setLineSpacing(0);
    double w = Math.min(helper.prefWidth(-1), wrappingWidth);
    helper.setWrappingWidth((int)Math.ceil(w));
    double textWidth = Math.ceil(helper.getLayoutBounds().getWidth());
    return textWidth;
}

如果我没记错的话,这里的诀窍是将prefWidth设置为-1。请参阅JavaDoc

答案 1 :(得分:1)

FontMetrics metrics = Toolkit.getToolkit().getFontLoader().getFontMetrics(font);
float charWidth = metrics.computeStringWidth("a");
float charHeight = metrics.getLineHeight();