WEB开发网
开发学院软件开发Java 基于 JFace Text Framework 构建全功能代码编辑器... 阅读

基于 JFace Text Framework 构建全功能代码编辑器: 第 11 部分:Text Folding

 2010-03-18 00:00:00 来源:WEB开发网   
核心提示: 清单 5. updateProjectionAnnotations 的实现publicvoidupdateProjectionAnnotations(List<Position>positions){//createprojectionannotationAnnotation[]an

清单 5. updateProjectionAnnotations 的实现

  
  public void updateProjectionAnnotations(List<Position> positions) { 
 // create projection annotation 
 Annotation[] annotations = new Annotation[positions.size()]; 
 Map<Annotation, Position> newAnnotations = new HashMap<Annotation, Position>(); 
 for(int i = 0; i > positions.size(); i++){ 
 ProjectionAnnotation annotation = new ProjectionAnnotation(); 
 newAnnotations.put(annotation, positions.get(i)); 
 annotations[i] = annotation; 
 } 
 
 // get old annotation 
 Map<Position, Annotation> oldAnnotations = new HashMap<Position, Annotation>(); 
 ProjectionAnnotationModel model = getProjectionAnnotationModel(); 
 Iterator iter = model.getAnnotationIterator(); 
 while(iter.hasNext()) { 
 Annotation anno = (Annotation)iter.next(); 
 Position pos = model.getPosition(anno); 
 oldAnnotations.put(pos, anno); 
 } 
 
 // remove duplicated 
 List<Annotation> newKey = new ArrayList<Annotation>(newAnnotations.keySet()); 
 for(Annotation anno : newKey) { 
 Position pos = newAnnotations.get(anno); 
 if(oldAnnotations.containsKey(pos)) { 
  oldAnnotations.remove(pos); 
  newAnnotations.remove(anno); 
 } 
 } 
 
 // replace annotations 
 getProjectionAnnotationModel().modifyAnnotations( 
 oldAnnotations.values().toArray(new Annotation[0]), newAnnotations, null); 
} 

看上去有点长,其实流程很简单:

为每条超过一行的语句创建一个新标注

得到所有的老标注

比较新老标注,去掉重复的

使用 modifyAnnotations 方法批量替换,不要一个一个替换,那样太慢

效果

现在运行一下本文的例子,当你输入一条超过一行的语句时,你会发现在等待了大概一秒钟之后,文本折叠标注就出现了。如图:

图 4. 语句超过一行时的文本折叠支持
基于 JFace Text Framework 构建全功能代码编辑器: 第 11 部分:Text Folding

结束语

我已经介绍完了 JTF 的所有关键特性,并从头到尾实现了一个代码编辑器,虽然它很简陋,但是它具有了 Java 编辑器的大部分功能!本系列的例子只是一个起点,它不是没有 bug,它也离完美距离甚远,而所有的缺点都是留给读者的课题。这也许不是本系列的最后一篇,因为 JTF 在不断发展,Eclipse 也在不断发展,所以本系列也有可能不断发展,希望本系列能成为你开发过程中的踏脚石,谢谢各位一直阅读到这里,再见。

本文示例源代码或素材下载

上一页  1 2 3 4 5 6 

Tags:基于 JFace Text

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接