Java 文本监听

来源:百度知道 编辑:UC知道 时间:2024/06/23 16:12:18
近日在写一个记事本程序,要求实现关键字染色功能(仿照Ultraedit,比如关键字红色,非关键字黑色)。可是在文本监听上遇到了困难。试过KeyListener和DocumentListener。
KeyListener是在字符键入后、文本变更前进行响应的,本来如果输入public后又按退格键两次,这时剩下的publ应重新变为黑色。应该通过Document对象的remove() 和insertString()将其重新变为黑色。可是如果这样做的话,当鼠标已经选取了一段文本时,按下退格键,会把Java非关键字染成黑色,由于这个过程中调用了remove和insertString方法,将导致鼠标选取的文本不会被删去。。。。而且由于KeyListener响应时键入字符还没有添加到文本中,使得Java关键字不能在一输入完后就染色。
DocumentListener可以再文本变更后进行响应,可以避免上述问题。可是会由于Document remove()和inserString()方法修改了文本,会陷入死循环。

文本染色是通过remove方法和insertString方法进行的,即先将要染色的字段删去,再添加染色后的字段
Document doc = jTextPane.getDocument();
doc.remove(start, len + 1 - type);
doc.insertString(start, str, attrSet);

可以给你提供一个方向,用DocumentFilter,
这个类是在入力的字符串,插入到控件之前调用的
这样的话就不用先删除在插入了

具体用法查javaDoc。