如何在JavaFX中设置字体的字母间距(也就是跟踪)?

问题描述 投票:0回答:2

互联网告诉我它在JavaFX 1.x中可用(我发现的大多数例子都是.fx格式,现在已经过时了)。但现在(JavaFX 2. *)似乎无法做到。我可以想到一种方法来实现我想要的效果:填充Text中的每个字母,并将所有这些字母添加到FlowPane中,并将HGap设置为所需的间距。但我宁愿把它作为最后的手段。哦,我也试过把-fx-letter-spacing放在我的样式表中,也没用。

java javafx-2 javafx-8
2个回答
2
投票

我制作了一个符合我需求的自定义类(警告:没有很多功能)

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);
            }
        }
    }
}

0
投票

我知道我迟到了,但万一有人还在寻找答案:

我一直在开发一个小型文本编辑器应用程序,其中一个核心业务功能是用户手动设置文本间距(也称为“跟踪”)的可能性。 JavaFX在这种情况下非常不方便 - 没有可以处理它的CSS,你不能通过通用控制器的API设置它,也没有办法自定义使用过的Font,所以它可能包括跟踪。

由于JavaFX无法做到并且仍然需要使用它,因此将FX与其他库(如Swing)混合有一些可能性。我用SwingNode并将JTextField包裹在里面。 JTextField提供setting Font from AWT的可能性。与JavaFX中使用的字体不同,AWT中的字体可以根据字母跟踪进行自定义。为此,请使用Font的attributes并根据您的需要设置TRACKING

小心 - 将JavaFX与Swing结合起来有时可能会有问题,即使众多消息来源另有说明。例如,我在我的应用程序中使用给定的JTextField进行动态渲染时遇到了很大的问题。我执行了很多动画(主要涉及拖动用户空间周围的东西,快速更改字体细节等)。但我想只要您需要静态位置的输入并且您不会做很多动画,它应该可以很好地工作。

顺便说一句。事实上,JavaFX仍然没有处理这个跟踪问题,这有点让人伤心。

© www.soinside.com 2019 - 2024. All rights reserved.