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