FontLoader computeStringWidth的替代方法

时间:2017-10-09 07:41:16

标签: javafx javafx-8

我正在寻找FontLoader.computeStringWidth的替代方法,因为这是com.sun包中的一个类,不应该使用。

这用于根据文本动态设置prefWidth,以便考虑文本字体大小(可能来自CSS)。有多个GridPane我希望第一列与所有网格对齐。

例如

由此:

| Column1Text |第2栏|

| Column1TextMore |第2栏|

| Column1TextSomeMore |第2栏|

对此(忽略点):

| Column1Text ................. |第2栏|

| Column1TextMore ......... |第2栏|

| Column1TextSomeMore |第2栏|

我确实在这里找到了一个接受的答案,即创建一个临时场景,向其中添加一个Text,然后调用applyCss并最终得到宽度。但是我不喜欢这个选择。一定是更好的方式。 https://stackoverflow.com/a/13020490/1835477

在我的情况下,我有多个网格,为每个网格创建一个场景/文本似乎是一个糟糕的解决方案(性能明智),而不是特别优雅。

1 个答案:

答案 0 :(得分:1)

没有比this answer上描述的更好的解决方案了。

  1. 将要测量的字符串放在Text对象中。
  2. 创建一次性场景并将Text对象放置在场景中。
  3. 在Text对象上调用applyCss。
  4. 获取Text对象布局边界的宽度。
  5. 样品:

    final Text text = new Text("XYZ");
    new Scene(new Group(text));
    text.applyCss(); 
    final double width = text.getLayoutBounds().getWidth();