fonts - JavaFX FontMetrics

标签 fonts javafx

我试图在水平和垂直方向上准确地将文本放置在 Pane 的中心。使用 fontmetrics 和测试程序,我得到以下结果:

enter image description here

该测试提出以下问题:

  • 为什么上升值(顶部黑线)如此之高?我预计它会穿过“T”的顶部。洋红色线是 'lineheight' 值,所以我假设它是它上面任何文本的基线。
  • 如果黑线包括行距,为什么没有测量“T”的顶部?
  • 有没有办法获得准确的边界框,或者我是否必须以图形方式对文本图像进行线扫描才能找到边界?显然,左右值还包括某种间距,因此扫描似乎是唯一的解决方案。
  • 最佳答案

    这是 Frank 的 reportSize 的替代实现功能:

    public void reportSize(String s, Font myFont) {
        Text text = new Text(s);
        text.setFont(myFont);
        Bounds tb = text.getBoundsInLocal();
        Rectangle stencil = new Rectangle(
                tb.getMinX(), tb.getMinY(), tb.getWidth(), tb.getHeight()
        );
    
        Shape intersection = Shape.intersect(text, stencil);
    
        Bounds ib = intersection.getBoundsInLocal();
        System.out.println(
                "Text size: " + ib.getWidth() + ", " + ib.getHeight()
        );
    }
    

    此实现使用 shape intersection确定没有空格的渲染形状的边界框的大小。实现不依赖于com.sun Java 9+ 中的用户应用程序代码可能无法直接访问的包类。

    关于fonts - JavaFX FontMetrics,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32237048/

    相关文章:

    android - Android 中的默认字体特征是什么?

    android - 确定用户字体大小选择

    fonts - ImageMagick 转换命令无法读取字体

    javascript - 指定字体名称的一部分

    Java FX - 不可扩展的窗口

    java - 从 jar 文件访问文件和图像

    java - 将数组列表添加到我的 javafx 程序中的选择框

    html - 使用 rem 调整大小时是否需要设置基本字体大小?

    java - 时间轴动画JavaFX

    javafx - 在对话框中的按钮下添加文本