在JavaFXTextArea中突出显示字符串

在JavaFXTextArea中突出显示字符串,java,javafx,spell-checking,highlighting,javafx-2,Java,Javafx,Spell Checking,Highlighting,Javafx 2,我们在应用程序中使用JavaFX的TextArea控件,并尝试将其与拼写检查API集成—例如,当用户输入字典中没有的错误单词时,该单词将突出显示 是否有方法突出显示所述控件中的单词?我在JavaDocs中没有看到这方面的选项,所以如果有人能建议一种方法 我想,可以使用HTMLEditor组件,并使用对单词进行不同的着色。JavaFX TextArea控件(从2.0.2开始)不支持混合文本样式(字体等)的富文本编辑 通过操纵TextArea的selectRange,可以高亮显示TextArea中连

我们在应用程序中使用JavaFX的
TextArea
控件,并尝试将其与拼写检查API集成—例如,当用户输入字典中没有的错误单词时,该单词将突出显示

是否有方法突出显示所述控件中的单词?我在JavaDocs中没有看到这方面的选项,所以如果有人能建议一种方法


我想,可以使用
HTMLEditor
组件,并使用
对单词进行不同的着色。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); }
    });
  }
}
公共类文本突出显示扩展应用程序{
公共静态void main(字符串[]args){Application.launch(args);}
@覆盖公共无效开始(阶段){
final TextArea text=新TextArea(“这里有一些要突出显示的textz”);
text.setStyle(“-fx高光填充:浅灰色;-fx高光文本填充:firebrick;-fx字体大小:20px;”);
text.setEditable(false);
addEventFilter(MouseEvent.ANY,new EventHandler()){
@重写公共无效句柄(MouseEvent t){t.consume();}
});
舞台场景(新场景(文本));
stage.show();
Platform.runLater(新的Runnable(){
@重写public void run(){text.selectRange(13,18);}
});
}
}
您可以使用上面的代码作为基础,在进行拼写检查时将TextArea切换到只读模式。执行提示,依次查找和修复每个单词,直到拼写检查完成。在单独的对话框或面板中执行提示。Jazzy演示似乎就是这样工作的,因此将其Swing UI转换为JavaFX应该相当容易



或者,您可以使用一个JavaFX WebView控件来包装许多基于javascript/html的拼写检查程序(例如),使用类似于此处演示的技术:。

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); }
    });
  }
}
公共类文本突出显示扩展应用程序{
公共静态void main(字符串[]args){Application.launch(args);}
@覆盖公共无效开始(阶段){
final TextArea text=新TextArea(“这里有一些要突出显示的textz”);
text.setStyle(“-fx高光填充:浅灰色;-fx高光文本填充:firebrick;-fx字体大小:20px;”);
text.setEditable(false);
addEventFilter(MouseEvent.ANY,new EventHandler()){
@重写公共无效句柄(MouseEvent t){t.consume();}
});
舞台场景(新场景(文本));
stage.show();
Platform.runLater(新的Runnable(){
@重写public void run(){text.selectRange(13,18);}
});
}
}
您可以使用上面的代码作为基础,在进行拼写检查时将TextArea切换到只读模式。执行提示,依次查找和修复每个单词,直到拼写检查完成。在单独的对话框或面板中执行提示。Jazzy演示似乎就是这样工作的,因此将其Swing UI转换为JavaFX应该相当容易



或者,您可以使用JavaFX WebView控件包装许多基于javascript/html的拼写检查程序(例如),使用类似于此处演示的技术:。

允许您向文本范围添加样式。

允许您向文本范围添加样式。

有可能。。。有点

我知道这个问题已经解决了,但我找到了一个解决问题的方法,我想我会把它发布给其他偶然发现这个帖子的人。这有点老套,但如果您需要突出显示文本区域中的文本,并且不想接受不令人满意的“不可能”答案,那么它在必要时会起作用

  • 检索文本区域的背景色和文本字体的前景色
  • 计算前景色和背景色之间的最高对比度
  • 在所需文本周围放置一个矩形
  • 将矩形的颜色设置为背景色
  • 将矩形的blendmode设置为对比度最高的箱子
  • 禁用矩形
  • 矩形现在将与背景完美融合,但会更改文本的颜色。禁用矩形意味着对用户来说,它不会显得像苦行僧一样-例如,单击矩形之类的操作不会产生意外效果

    如果需要多种颜色,可以稍微调整此方法


    如果人们感兴趣、怀疑或者工作起来很棘手,我可以发布实施细节。

    这是可能的。。。有点

    我知道这个问题已经解决了,但我找到了一个解决问题的方法,我想我会把它发布给其他偶然发现这个帖子的人。这有点老套,但如果您需要突出显示文本区域中的文本,并且不想接受不令人满意的“不可能”答案,那么它在必要时会起作用

  • 检索文本区域的背景色和文本字体的前景色
  • 计算前景色和背景色之间的最高对比度
  • 在所需文本周围放置一个矩形
  • 将矩形的颜色设置为背景色
  • 将矩形的blendmode设置为对比度最高的箱子
  • 禁用矩形
  • 矩形现在将与背景完美融合,但会更改文本的颜色。禁用矩形意味着对用户来说,它不会显得像苦行僧一样-例如,单击矩形之类的操作不会产生意外效果

    您可以稍微调整此方法