如何更改在文本字段中呈现文本的方式?

huangapple go评论71阅读模式
英文:

How can I change how text is rendered in a TextField?

问题

我正在创建一个修改过的TextArea,它应该像控制台一样运行。为了分隔输出,我正在使用两个私用字符:U+FF100 和 U+FF101。

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

我正在使用JavaFX 14.0.2.1。

英文:

I'm creating a modified TextArea that should function like a console. To delineate output, I'm using two private-use characters: U+FF100 and U+FF101.

These characters need to be invisible when shown onscreen (i.e. like a zero-width space). I was thinking about a custom font, but I might be able to do this in my code. How do I go about doing this?

I'm using JavaFX 14.0.2.1.

答案1

得分: 2

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,也可以这样做。您会想要存储最后一个已设置样式的范围,以便在值更改时从该范围之后开始。

英文:

RichTextFX has the InlineCssTextArea class, which allows you to add style for text ranges. You could use display: none (or the JavaFX equivalent) on the ranges.

I haven't used it, but based on the API, something like this should work:

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

You could also use a for loop if that is your preference. You would want to store the last range styled, so that when the value changes, you begin after that range.

huangapple
  • 本文由 发表于 2020年8月11日 00:52:18
  • 转载请务必保留本文链接:https://go.coder-hub.com/63344559.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定