如何使文本流可选择

How to make textflow selectable

我做了一个 TextFlow,因为我需要使用多种字体(我已经将特定的 "Text" 设置为斜体或正常)。一旦我显示 TextFlow,它就不是 selectable/copyable。我所需要的只是 TextFlow 在场景中显示后可选择,因此它可以是 copy/paste-able.

带有字体姿势的文本示例(为了示例仅举一个):

Text volumeText = new Text(volume.getText());
volumeText.setFill(Color.WHITE); 
volumeText.setFont(Font.font("arial", FontPosture.ITALIC, 13));
TextFlow reference = new TextFlow(
                         lastNameText, miscelanous1, firstNameText, miscelanous2);
reference.setLayoutX(115);
reference.setLayoutY(480);
reference.setMaxWidth(500);
control.getChildren().add(reference);

JavaFX 中的文本和 TextFlow 不是 "selectable"。

有一个未解决的问题:Text should have API for selecting group of characters based on their position similar to the DOM's Range

在问题得到解决之前,您最好的选择是使用像 RichTextFX 这样的第 3 方控件。

我认为我做类似工作的方式很糟糕

  1. 文本可以感知鼠标进入和退出移动事件

  2. 我们可以为鼠标按下和释放事件设置一个信号。在 Textflow 节点

    上触发此事件会很好
  3. extends Text class 使鼠标进入事件处理程序,当全局信号打开且鼠标输入文本时,将文本复制到某些地方 并记录文本流中的文本位置 使用……像 var index = textflow.getChildren().indexof(文本) 记录一对索引和文本

  4. 当触发鼠标释放或退出事件时,对选中的文本进行排序,并生成对应的文本到剪贴板