I noticed that paragraphs in CodeArea are updated too aggressively. For example, when I press a single key like '1', about 100 paragraphs get refreshed.
To improve performance, I decided to implement it this way: I store information for each paragraph indicating whether its styles are up-to-date or not. From SyntaxDecorator, I return the existing paragraph from the model if the styles are valid. If the styles are outdated, I build a new paragraph. Something like this: codeArea.setSyntaxDecorator(new SyntaxDecorator() { @Override public RichParagraph createRichParagraph(CodeTextModel model, int index) { if (paragraphStylesAreValid) { return codeArea.getModel().getParagraph(index); } else { RichParagraph.Builder b = RichParagraph.builder(); ... return b.build(); } } @Override public void handleChange(CodeTextModel m, TextPos start, TextPos end, int charsTop, int linesAdded, int charsBottom) { } }); However, it didn't work because of this line - https://github.com/openjdk/jfx/blob/3fdd21386d6db96294fcecd80afc25d09732c067/modules/jfx.incubator.richtext/src/main/java/jfx/incubator/scene/control/richtext/model/CodeTextModel.java#L83 As I result I get StackOverflowError. Could anyone say how to do it? Best regards, Pavel