2012-06-18 31 views
7

我问了一个question before about VerticalRulers,这个提示我向VerticalRuler添加了第二个列,并试图给它添加标记,但标记总是出现在标准列上,但是不在我的身上。我添加了第二个行号列来说明我的问题。我如何改变这种行为?谢谢你的帮助。Eclipse编辑器:在垂直标尺的自定义列上显示标记

@Override 
protected IVerticalRuler createVerticalRuler(){ 
    IVerticalRuler ruler = super.createVerticalRuler(); 
    ruler2 = (CompositeRuler) ruler; 
    column1 = new AnnotationRulerColumn(100); 
    ruler2.addDecorator(0, column1); 
    ruler2.addDecorator(2, createLineNumberRulerColumn()); 
    column1.addAnnotationType("MARKER"); 
    return ruler; 
} 
public String check_line(){ 
    IEditorPart editor = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor(); 
    IFileEditorInput input = (IFileEditorInput)editor.getEditorInput() ; 
    IFile file = input.getFile(); 
    IResource res = (IResource) file; 
    try{ 
     IMarker m = res.createMarker(IMarker.MARKER); 
     m.setAttribute(IMarker.LINE_NUMBER,2); 
     m.setAttribute(IMarker.MESSAGE, "lala"); 
     m.setAttribute(IMarker.TEXT, "test"); 
     m.setAttribute(IMarker.PRIORITY, IMarker.PRIORITY_HIGH); 
     m.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_INFO); 
    } catch (CoreException e) { ... } 
    return "marker created"; 
} 

enter image description here

+0

让我知道,如果我的回答没有帮助你,或者你仍然有问题... –

回答

3

你只需要使用不同的构造函数AnnotationRulerColumn:

AnnotationRulerColumn(int width, IAnnotationAccess annotationAccess) 

可以使用DefaultMarkerAnnotationAccess的说法IAnnotationAccess

protected IVerticalRuler createVerticalRuler(){ 
    IVerticalRuler ruler = super.createVerticalRuler(); 
    CompositeRuler ruler2 = (CompositeRuler) ruler; 
    column1 = new AnnotationRulerColumn(100, new DefaultMarkerAnnotationAccess()); 
    ruler2.addDecorator(0, column1); 
    ruler2.addDecorator(2, createLineNumberRulerColumn()); 
    column1.addAnnotationType("MARKER"); 
    return ruler; 
} 

我假设你有定义了一个注释类型wit h为您的标记名称“MARKER”。 如果不是,请确保为column1.addAnnotationType("MARKER");使用注释类型的名称,而不是标记类型。您可以定义自己的注释类型,并将其映射到扩展点为Annotation Types的标记类型。

您的标记/注释应该显示在您自己的垂直标尺上。

+0

对不起,我迟到了,但我只是为了沮丧,所以我做了两个星期不同的工作。今天我再次尝试,我很高兴它能与DefaultMarkerAnnotationAccess一起使用。现在的问题是,它会在新列和原始列中创建两次myMarker。 – eactor

+0

问题是注释类型myMarker继承自super clase“org.eclipse.ui.workbench.texteditor.warning”,它使标记出现在标准列中 – eactor

相关问题