2017-10-09 94 views
1

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

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

例如

从这:

| Column1Text | Column2 |

| Column1TextMore | Column2 |

| Column1TextSomeMore | Column2 |

对此(无视点):

| Column1Text ................. | Column2 |

| Column1TextMore ......... | Column2 |

| Column1TextSomeMore | Column2 |

我在这里找到了一个可以接受的答案,那就是创建一个临时场景,给它添加一个文本,然后调用applyCss并最终获得宽度。不过我不喜欢这个选择。必须是更好的方法。 https://stackoverflow.com/a/13020490/1835477

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

+0

无关:在FX9,该方法已移至别处... – kleopatra

+0

如果你的目标是要设置首选大小,不会使用['USE_COMPUTED_SIZE'](HTTPS ://docs.oracle.com/javase/8/javafx/api/javafx/scene/layout/Region.html#USE_COMPUTED_SIZE)的工作原理是什么? – Itai

回答

1

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

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

样品:

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