eclipse ui:设置滚动条但编辑器没有跟随

时间:2014-08-06 12:07:30

标签: eclipse user-interface editor

在Eclipse UI中,我想在编辑器中设置可见区域。换句话说,如果我的文件的行数大于我的编辑器可以显示的行数,那么我想指定第一个显示的行。我的方法是设置垂直滚动条的选择值。在下面你找到我的代码,从不相关的部分剥离。

给定代码正确设置滚动条(拇指正在跳跃)。问题是:编辑器中可见的区域不会反映此值,它只是保留在原来的位置。在下次使用滚动条时,例如,在单击箭头以递增值(向下滚动)之后,编辑器的可见区域跳转到正确的位置(即,拇指指定的位置)。

所以,我想,编辑器需要直接或通过监听器通知我设置的新滚动条值。但我找不到它的机制。

public static void update(IWorkbenchWindow w, int someValue)
{
    Display display = w.getWorkbench().getDisplay();
    Scrollable scrollable = (Scrollable) display.getFocusControl();
    ScrollBar vScrollBar = scrollable.getVerticalBar();
    vScrollBar.setSelection(someValue); // between minimal and maximal bound

    // missing call to notify the active editor about the scroll bar value change
} 

1 个答案:

答案 0 :(得分:1)

如您所见,ScrollBar.setSelection不会向其侦听器发送选择事件。

使用类似于文本编辑器Goto line代码所用代码的代码可能会更好:

IWorkbenchWindow w = ....

IWorkbenchPage page = w.getActivePage();

IEditorPart editor = page.getActiveEditor();

// TODO check editor is actually a text editor
ITextEditorPart textEditor = (ITextEditorPart)editor;

IDocumentProvider provider = textEditor.getDocumentProvider();
IDocument document = provider.getDocument(textEditor.getEditorInput());

try {
  int start = document.getLineOffset(line);

   textEditor.selectAndReveal(start, 0);
} catch (BadLocationException x) {
    // ignore
}

部分改编自org.eclipse.ui.texteditor.GotoLineAction

您可以使用TextViewer方法从编辑器SourceViewergetTopIndex()获取当前的可见行。