如何更改文本在 TextField 中的呈现方式?
How can I change how text is rendered in a TextField?
我正在创建一个修改后的 TextArea,它应该像控制台一样工作。为了描述输出,我使用了两个专用字符:U+FF100 和 U+FF101。
这些字符在屏幕上显示时需要不可见(即像零宽度 space)。我在考虑自定义字体,但我可以在我的代码中做到这一点。我该怎么做?
我正在使用 JavaFX 14.0.2.1。
RichTextFX has the InlineCssTextArea class,允许您为文本范围添加样式。您可以在范围内使用 display: none
(或等效的 JavaFX)。
我没用过,但基于 API,像这样的东西应该可以工作:
InlineCssTextArea textArea = new InlineCssTextArea(text);
textArea.textProperty().addListener((observable, oldValue, newValue) -> {
int index = textArea.getText().indexOf("\uDBBC\uDD00");
while(index >= 0) {
textArea.setStyle(0, index, index + 1, "display: none;");
index = textArea.getText().indexOf("\uDBBC\uDD00", index + 1);
}
}
如果您愿意,也可以使用 for loop
。您可能想要存储最后一个样式化的范围,以便当值更改时,您可以从该范围之后开始。
我正在创建一个修改后的 TextArea,它应该像控制台一样工作。为了描述输出,我使用了两个专用字符:U+FF100 和 U+FF101。
这些字符在屏幕上显示时需要不可见(即像零宽度 space)。我在考虑自定义字体,但我可以在我的代码中做到这一点。我该怎么做?
我正在使用 JavaFX 14.0.2.1。
RichTextFX has the InlineCssTextArea class,允许您为文本范围添加样式。您可以在范围内使用 display: none
(或等效的 JavaFX)。
我没用过,但基于 API,像这样的东西应该可以工作:
InlineCssTextArea textArea = new InlineCssTextArea(text);
textArea.textProperty().addListener((observable, oldValue, newValue) -> {
int index = textArea.getText().indexOf("\uDBBC\uDD00");
while(index >= 0) {
textArea.setStyle(0, index, index + 1, "display: none;");
index = textArea.getText().indexOf("\uDBBC\uDD00", index + 1);
}
}
如果您愿意,也可以使用 for loop
。您可能想要存储最后一个样式化的范围,以便当值更改时,您可以从该范围之后开始。