在JavaFXTextArea中突出显示字符串
我们在应用程序中使用JavaFX的在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中连
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设置为对比度最高的箱子
禁用矩形
矩形现在将与背景完美融合,但会更改文本的颜色。禁用矩形意味着对用户来说,它不会显得像苦行僧一样-例如,单击矩形之类的操作不会产生意外效果
您可以稍微调整此方法