Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
EclipseUI:设置滚动条,但编辑器不遵循_Eclipse_User Interface_Editor - Fatal编程技术网

EclipseUI:设置滚动条,但编辑器不遵循

EclipseUI:设置滚动条,但编辑器不遵循,eclipse,user-interface,editor,Eclipse,User Interface,Editor,在EclipseUI中,我想在编辑器中设置可见区域。换句话说,如果文件的行数大于编辑器可以显示的行数,则我希望指定显示的第一行。我的方法是设置垂直滚动条的选择值。下面是我的代码,从无关部分剥离出来 给定的代码正确设置滚动条(拇指在跳跃)。问题是:编辑器中可见的区域并不反映此值,它只是保持原样。下次使用滚动条时,例如,在单击增加值的箭头(向下滚动)后,编辑器的可见区域跳转到正确的位置(即拇指指定的位置) 因此,我想,需要直接或通过侦听器将我设置的新滚动条值通知编辑器。但我找不到它的机制 公共静态无

在EclipseUI中,我想在编辑器中设置可见区域。换句话说,如果文件的行数大于编辑器可以显示的行数,则我希望指定显示的第一行。我的方法是设置垂直滚动条的选择值。下面是我的代码,从无关部分剥离出来

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

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

公共静态无效更新(IWorkbenchWindow,int-someValue)
{
Display Display=w.getWorkbench().getDisplay();
Scrollable Scrollable=(Scrollable)display.getFocusControl();
ScrollBar vScrollBar=可滚动的.getVerticalBar();
vScrollBar.setSelection(someValue);//介于最小和最大界限之间
//缺少通知活动编辑器有关滚动条值更改的调用
} 

正如您所看到的
滚动条。setSelection
不会向其侦听器发送选择事件

您可能会更好地使用与文本编辑器使用的代码类似的代码
Goto-line
code:

IWorkbenchWindow w=。。。。
IWorkbenchPage=w.getActivePage();
IEditorPart editor=page.getActiveEditor();
//TODO check编辑器实际上是一个文本编辑器
ITextEditorPart文本编辑器=(ITextEditorPart)编辑器;
IDocumentProvider=textEditor.getDocumentProvider();
IDocument document=provider.getDocument(textEditor.getEditorInput());
试一试{
int start=document.getLineOffset(行);
文本编辑器。选择并显示(开始,0);
}捕获(BadLocationException x){
//忽略
}
部分改编自
org.eclipse.ui.texteditor.GotoLeaction


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

该方法回答了如何将可见区域移动到某一行的问题。现在缺少的是从编辑器中获取第一行可见内容。selectAndReveal()只解决了95%的问题:它不稳定。如果获得第一行可见内容,请应用selectAndReveal(),然后重复该操作,文档的可见部分将“跳转”。跳跃的距离似乎取决于窗口的大小。计算selectAnd Relal()前后第一条可见线之间的增量也没有帮助,因为这只会移动选定线,而不会移动第一条可见线。如何以稳定的方式确定第一条可见行?似乎将(getBottomIndex()-getTopIndex())/3添加到getTopIndex()的值可以解决这个问题