2012-02-03 110 views
7

我们在我们的应用程序中使用JavaFX的TextArea控件,并试图将其与Jazzy拼写检查API集成 - 如用户输入的错误单词不在字典中,此类单词将会是突出显示。突出显示JavaFX TextArea中的字符串

有没有一种方法可以突出显示所述控件中的单词?我在JavaDocs中没有看到这样的选择,所以如果有人可以提出一种方法?

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

回答

8

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应该相当容易。


或者,你可以使用一个JavaFX WebView控件封装任意使用类似于这里展示什么是技术多个JavaScript/HTML的拼写检查器(例如http://www.javascriptspellcheck.com/)的:http://jewelsea.wordpress.com/2011/12/11/codemirror-based-code-editor-for-javafx/

13

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

5

这是可能的...之类的

我知道这个问题是解决了,但我找到了一种方法来解决这个问题,我想我会发布它为其他人谁也偶然发现这个帖子。这有点冒险,但是如果你需要突出显示TextArea中的文本并且不想接受令人不满意的“不可能的”答案,那么它会在一个小小的范围内工作。

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

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

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

我可以发布实施细节,如果人们有兴趣,持怀疑态度,或者如果它的工作很棘手。

+1

我想知道更多关于这个解决方案。特别是#3。你怎么知道在哪里放置矩形;当窗口/ TextArea移动时会发生什么;你如何处理半透明或隐藏文本的例外; TextArea滚动时会发生什么? – 2014-07-31 01:56:47

+0

哇,伙计,这是哈克!荣誉! ;-) – 2018-02-02 17:28:07

+0

你如何决定把矩形放在哪里?例如,假设我想突出显示字符7-13(并且我不知道是否包含换行符)!!我该如何确定矩形左上角的位置? – 2018-02-02 18:45:25

5

使用JavaFX 8,您可以使用 TextFlow的

可以在TextFlow中定义某些样式类的大胆,红色,绿色或任何类型的Texts并安排他们同时分配所需的样式类,每个文本

相关问题