如何更改文本在 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。您可能想要存储最后一个样式化的范围,以便当值更改时,您可以从该范围之后开始。