簡體   English   中英

如何在JavaFX中設置字體的字母間距(也稱為跟蹤)?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM