王吉元-NWPU

导航

 

JFace中的SourceViewer封装了 StyledText这个控件,该控件可以自由设置光标位置及鼠标形状。我们根据该控件来做设置: 

 

光标位置的设置,result是空间内容中光标所在偏移量(int):

sourceViewer.getTextWidget().setCaretOffset(result);  

sourceViewer.getTextWidget().setFocus(); 

 

鼠标图形的设置:

viewer.getTextWidget().setCursor(new Cursor(getDisplay().getCurrent(),SWT.CURSOR_HAND));

第二个参数为鼠标形状样式,可供使用的样式有:

 

SWT.CURSOR_

ARROWSWT.CURSOR

_WAITSWT.CURSOR

_CROSSSWT.CURSOR_

APPSTARTINGSWT.CURSOR

_HELPSWT.CURSOR_

SIZEALLSWT.CURSOR_

SIZENESWSWT.CURSOR_

SIZENSSWT.CURSOR_

SIZENWSESWT.CURSOR_

SIZEWESWT.CURSOR_

SIZENSWT.CURSOR_

SIZESSWT.CURSOR_

SIZEESWT.CURSOR_

SIZEWSWT.CURSOR_

SIZENESWT.CURSOR_

SIZESESWT.CURSOR_

SIZESWSWT.CURSOR_

SIZENWSWT.CURSOR_

UPARROWSWT.CURSOR_

IBEAMSWT.CURSOR_

NOSWT.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()])));

    }

posted on 2013-03-11 15:02  王吉元  阅读(673)  评论(0编辑  收藏  举报