[英]How to set the letter spacing (aka tracking) of a Font in JavaFX?
互聯網告訴我它可以在JavaFX 1.x中使用(我發現的大多數示例都是.fx格式,現在已經過時了)。 但是現在(JavaFX 2. *)似乎無法執行。 我可以想到一種實現所需效果的方法:將每個字母填充到Text
然后將所有字母添加到FlowPane
,並將HGap
設置為所需的間距。 但我寧願將此作為最后的手段。 哦,我也嘗試過將-fx-letter-spacing
放在樣式表中,也不起作用。
我制作了一個適合我需要的自定義類(警告:功能不多)
public class LetterSpacedText extends FlowPane {
private Font font;
private Color fill;
public LetterSpacedText(String s, double spacing) {
setText(s);
setHgap(spacing);
}
public void setText(String s) {
getChildren().clear();
for (int i = 0; i < s.length(); i++) {
getChildren().add(new Text("" + s.charAt(i)));
}
setFont(this.font);
setFill(this.fill);
}
public void setFont(Font font) {
if (font != null) {
this.font = font;
for (Node t : getChildren()) {
((Text) t).setFont(font);
}
}
}
public void setFill(Color fill) {
if(fill != null) {
this.fill = fill;
for (Node t : getChildren()) {
((Text) t).setFill(fill);
}
}
}
}
我知道我參加晚會很晚,但以防萬一有人還在尋找答案:
我一直在開發一個小型的文本編輯器應用程序,該應用程序的核心業務功能之一是用戶可以手動設置文本間距(也稱為“跟蹤”)。 在這種情況下,JavaFX非常不方便-沒有CSS可以處理它,您無法通過通用控制器的API對其進行設置,並且無法自定義使用的Font,因此它可能包含跟蹤。
由於JavaFX無法做到這一點,並且仍然需要使用它,因此存在將FX與其他庫(例如Swing)混合的可能性。 我使用了SwingNode並將JTextField包裝在其中。 JTextField提供了從AWT設置Font的可能性。 與JavaFX中使用的字體不同,AWT中的字體可以根據字母跟蹤進行自定義。 為此,請使用Font的屬性,並根據需要設置TRACKING 。
請注意 -將JavaFX與Swing結合有時可能會出現故障,即使有大量消息來源另有說明。 例如,我在應用程序中動態渲染給定的JTextField面臨着巨大的問題。 我執行了許多動畫(主要與在用戶空間周圍拖動東西,快速更改字體細節等有關)。 但是我想,只要您需要在靜態位置輸入內容並且不會做太多動畫,它就可以很好地工作。
順便說一句。 JavaFX仍未解決此跟蹤問題的事實令人有些難過。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.