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/。
我想知道更多关于这个解决方案。特别是#3。你怎么知道在哪里放置矩形;当窗口/ TextArea移动时会发生什么;你如何处理半透明或隐藏文本的例外; TextArea滚动时会发生什么? – 2014-07-31 01:56:47
哇,伙计,这是哈克!荣誉! ;-) – 2018-02-02 17:28:07
你如何决定把矩形放在哪里?例如,假设我想突出显示字符7-13(并且我不知道是否包含换行符)!!我该如何确定矩形左上角的位置? – 2018-02-02 18:45:25