JFace中的SourceViewer封装了 StyledText这个控件,该控件可以自由设置光标位置及鼠标形状。我们根据该控件来做设置:
光标位置的设置,result是空间内容中光标所在偏移量(int):
sourceViewer.getTextWidget().setCaretOffset(result);
sourceViewer.getTextWidget().setFocus();
鼠标图形的设置:
viewer.getTextWidget().setCursor(new Cursor(getDisplay().getCurrent(),SWT.CURSOR_HAND));
第二个参数为鼠标形状样式,可供使用的样式有:
比如在实现TextEditer的内容辅助功能的时候,要实现自动补齐大括号就需要用到,代码如下:
public ICompletionProposal[] computeCompletionProposals(ITextViewer viewer,int offset){ 
     IDocument document = viewer.getDocument(); 
     String docStr=document.get();
     String autoMatch="{\n\n";
     String addspace=" ";
     char[] desChar = docStr.toCharArray();
     int mid = offset-1;
     int i=mid;
     
     for(;i>=0;i--)
     {
      if(i==0 || desChar[i-1]==' ' || desChar[i-1]=='\n')
       break;
     }
  String currentChar= String.valueOf(desChar,i,mid-i+1);
     if(desChar[offset-1]=='{')
     {
      try {
       int start=document.getLineOffset(document.getLineOfOffset(offset));
       int numspace=offset-start-1;
       //System.out.println("本行第一个字符的位置:"+start);
       //System.out.println("应该补齐的空格数:"+numspace);
       for(i=0;i<numspace;i++)
       {
        autoMatch+=' ';
        addspace+=' ';
       }
       autoMatch+='}';
       //对于document而言,offset是从0开始的。所以offset要用offset-1,而将length设置成0就相当于实现了insert的功能。
       document.replace(offset-1, 1, autoMatch);  //匹配大括号
    document.replace(offset+1, 0, addspace);   //将}的上一行补齐空格
    viewer.getTextWidget().setCaretOffset(offset-1+addspace.length()+2);//设置光标位置
    //sourceViewer.getTextWidget().setCaretOffset(result);  
   } catch (BadLocationException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
     }
     
  List list = getKeyWordProposals(currentChar,offset);
     return ((ICompletionProposal[])(list.toArray(new ICompletionProposal[list.size()])));
}
 
                    
                 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号