突出显示JavaFX TextArea中的string

我们在我们的应用程序中使用了JavaFX的TextArea控件,并试图将其与Jazzy Spell Check API集成 – 就像当用户input一个不在字典中的错误单词时,这样的单词将被突出显示。

有没有办法在所说的控件中突出显示一个单词? 我没有看到在JavaDocs中的select,所以如果有人可以提出一个办法?

我猜可以使用HTMLEditor组件,并用<font face="red=>wrongWord</font>不同的单词,但是这会给拼写检查带来很多不同的问题,例如作为html标签和单词计数。

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

您可以通过处理TextArea的selectRange来突出显示TextArea中连续的string,如下例所示:

 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切换到只读模式。 执行提示find并修复每个单词,直到拼写检查完成。 在单独的对话框或面板中执行提示。 Jazzy演示似乎以这种方式工作http://jazzy.sourceforge.net/demo.html ,因此将其Swing UI转换为JavaFX应该相当容易。


或者,您可以使用JavaFX WebView控件来使用类似于此处演示的技术来包装任何基于javascript / html的拼写检查程序(例如http://www.javascriptspellcheck.com/):http::// jewelsea。 wordpress.com/2011/12/11/codemirror-based-code-editor-for-javafx/ 。

RichTextFX允许您将样式添加到文本范围。

使用JavaFX 8,您可以使用TextFlow

您可以为粗体,红色,绿色或任何types的文本定义某些样式类,并将其排列在TextFlow中,同时将所需的样式类分配给每个文本

这是可能的…有点

我知道这个问题已经解决了,但是我find了一个解决这个问题的方法,并且认为我会把它发布给其他人也会遇到这个post。 这是一个有点hacky,但它的作品在一个捏,如果你需要突出显示TextArea中的文本,并不想接受令人不满的“不可能”的答案。

  1. 检索TextArea的背景色和文本字体的前景色
  2. 计算前景色和背景色之间的最高对比度
  3. 在所需的文本周围放置一个矩形
  4. 将矩形的颜色设置为背景颜色
  5. 将矩形的blendmode设置为最高对比度的bin
  6. 禁用矩形

现在,矩形将与背景完美融合,但会改变文本的颜色。 禁用矩形意味着它不仅仅performance为对用户的禁欲 – 例如点击矩形之类的动作将不会有意外的效果。

如果需要多种颜色的话,你可以稍微调整一下这个方法。

如果人们感兴趣,怀疑或者工作起来很麻烦,我可以发布实现细节。