繁体   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