首页 > 解决方案 > 如何更改文本在 TextField 中的呈现方式?

问题描述

我正在创建一个修改后的 TextArea,它应该像控制台一样工作。为了描述输出,我使用了两个私有字符:U+FF100 和 U+FF101。

这些字符在屏幕上显示时需要是不可见的(即像零宽度空间)。我正在考虑使用自定义字体,但我可能可以在我的代码中做到这一点。我该怎么做呢?

我正在使用 JavaFX 14.0.2.1。

标签: javajavafx

解决方案


RichTextFX具有InlineCssTextArea类,它允许您为文本范围添加样式。您可以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如果这是您的偏好,您也可以使用。您可能希望存储最后一个设置样式的范围,以便当值更改时,您会在该范围之后开始。


推荐阅读