在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
}
答案 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
方法从编辑器SourceViewer
或getTopIndex()
获取当前的可见行。