有效处理文本以进行语法着色

时间:2016-07-24 13:29:00

标签: javafx-8

我正在制作一个带语法高亮的文本编辑器。当前可编辑文本被实现为HBoxes列表,其中包含每个包含单个单词的Text实例列表。这样我就可以改变每个单词的风格。

显然,这是错误的方法,因为当文本文件很大时,我的解析器会创建一堆Text实例,这会消耗大量内存(由MAT检查)并降低程序的响应能力。有没有更好的方法来实现带语法着色的文本?

编辑:在Windows上渲染文本节点似乎比在我的Linux系统上更快。所以图形驱动程序问题也是如此。

1 个答案:

答案 0 :(得分:0)

你难道不能尝试合并相似颜色的Text个对象来减少所需的Text个对象的数量吗? 例如。对于开始方法

public void start(Stage primaryStage) {
}

您可以将public void合并到一个文字对象,将start( Stage primaryStage){合并到另一个文字对象。

用于属性声明,例如

@FXML Label lbl_name, lbl_amount, lbl_categories, lbl_date, lbl_value;
@FXML TextField tf_name;
@FXML ListView<String> lv_categories, lv_brand;
@FXML Spinner sp_amount, sp_value;
@FXML DatePicker dp_date;

您可以使用@FXML一个Label,其中每个@FXML都通过转义序列\n分隔,以显示多行。这同样适用于对象类型声明,它也应该以相同的方式着色。 例如。 lbl_name, lbl_amount, lbl_categories, lbl_date, lbl_value;可以合并在一起。

另一种方法是仅实例化实际显示给用户的行。

如果您要解析要显示在HTML中的代码,您还可以将HTMLEditor与HTML标记结合使用,以突出显示您的语法。