2017-10-09 24 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();