Jace中的光标与鼠标设置(ITextViewer)

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

}

你可能感兴趣的:(textview)