在 RichTextFX 中直接高亮一个文本范围
Directly highlight one text range in RichTextFX
我目前正在尝试在 RichTextFX 中显示文件的内容,然后在带有红色背景的行上突出显示特定字符范围表示此行存在问题。
我的代码可以整齐地显示所有内容,但不幸的是我没有突出显示。
代码:
InlineCssTextArea textArea = new InlineCssTextArea();
textArea.setParagraphGraphicFactory(LineNumberFactory.get(textArea));
textArea.setMinHeight(200.0);
textArea.getStylesheets().add(getClass().getResource("parser.css").toExternalForm());
try {
List<String> yourFileLines = Files.readAllLines(file.toPath());
textArea.replaceText(yourFileLines.stream().collect(Collectors.joining("\n")));
} catch (IOException e) {
e.printStackTrace();
}
textArea.setStyle(0, 0, 10, "error");
textArea.setEditable(false);
parser.css:
.error {
-rtfx-background-color: red;
}
根据documentation InlineCssTextArea#setStyle
直接取css属性参数。
因此,在您的情况下,它将是 textArea.setStyle(0, 0, 10, "-rtfx-background-color: red;");
。
注意如果你想要许多具有相同样式的组件,样式类名称更清晰,也是最好的方法(实际上在我看来这几乎总是最好的方法) .并通过阅读 this, if you want use class name you should choose the StyleClassedTextArea
instead of the InlineCssTextArea
. Indeed StyleClassedTextArea
accepts StyleClass as parameter of its method setStyle
. (see the example below).
我目前正在尝试在 RichTextFX 中显示文件的内容,然后在带有红色背景的行上突出显示特定字符范围表示此行存在问题。
我的代码可以整齐地显示所有内容,但不幸的是我没有突出显示。
代码:
InlineCssTextArea textArea = new InlineCssTextArea();
textArea.setParagraphGraphicFactory(LineNumberFactory.get(textArea));
textArea.setMinHeight(200.0);
textArea.getStylesheets().add(getClass().getResource("parser.css").toExternalForm());
try {
List<String> yourFileLines = Files.readAllLines(file.toPath());
textArea.replaceText(yourFileLines.stream().collect(Collectors.joining("\n")));
} catch (IOException e) {
e.printStackTrace();
}
textArea.setStyle(0, 0, 10, "error");
textArea.setEditable(false);
parser.css:
.error {
-rtfx-background-color: red;
}
根据documentation InlineCssTextArea#setStyle
直接取css属性参数。
因此,在您的情况下,它将是 textArea.setStyle(0, 0, 10, "-rtfx-background-color: red;");
。
注意如果你想要许多具有相同样式的组件,样式类名称更清晰,也是最好的方法(实际上在我看来这几乎总是最好的方法) .并通过阅读 this, if you want use class name you should choose the StyleClassedTextArea
instead of the InlineCssTextArea
. Indeed StyleClassedTextArea
accepts StyleClass as parameter of its method setStyle
. (see the example below).