一尘不染

在JavaFX TextArea中突出显示字符串

java

我们正在TextArea应用程序中使用JavaFX的控件,并尝试将其与Jazzy Spell Check API 集成在一起-例如,当用户输入词典中没有的错误单词时,该单词将突出显示。

有什么办法可以突出显示控件中的单词吗?我在JavaDocs中没有看到任何选择,因此,如果有人可以建议一种方法?

我想,可能有可能使用HTMLEditor组件并用分别为单词加上颜色<font face="red=>wrongWord</font>。但是,这会带来很多不同的拼写检查问题,例如html标签和字数统计。


阅读 1073

收藏
2020-03-20

共1个答案

一尘不染

JavaFX TextArea控件(自2.0.2开始)不支持混合文本样式(字体等)的富文本编辑。

你可以通过操纵TextArea的selectRange来突出显示TextArea中的连续字符串,如以下示例所示:

public class TextHighlight extends Application {
  public static void main(String[] args) { Application.launch(args); }
  @Override public void start(Stage stage) {
    final TextArea text = new TextArea("Here is some textz to highlight");
    text.setStyle("-fx-highlight-fill: lightgray; -fx-highlight-text-fill: firebrick; -fx-font-size: 20px;");
    text.setEditable(false);
    text.addEventFilter(MouseEvent.ANY, new EventHandler<MouseEvent>() {
      @Override public void handle(MouseEvent t) { t.consume(); }
    });

    stage.setScene(new Scene(text));
    stage.show();

    Platform.runLater(new Runnable() {
      @Override public void run() { text.selectRange(13, 18); }
    });
  }
}

你可以使用以上代码作为在进行拼写检查时将TextArea切换为只读模式的基础。实施提示以依次查找和修复每个单词,直到完成拼写检查为止。在单独的对话框或面板中执行提示。Jazzy演示似乎以这种方式工作http://jazzy.sourceforge.net/demo.html,因此将其Swing UI转换为JavaFX应该相当容易。

2020-03-20