如何获得eclipse视图和IJavaElement的屏幕尺寸

如何获得eclipse视图和IJavaElement的屏幕尺寸,eclipse,plugins,screen,multi-touch,dimension,Eclipse,Plugins,Screen,Multi Touch,Dimension,我编写了一个eclipse插件,在视图部分将一些Java类可视化为UML。您可以在软件包浏览器中选择一个软件包,然后在右键单击该软件包后,可以通过单击菜单中自行创建的命令菜单项来可视化该软件包。可视化是使用预使用库创建的。 我的下一个目标是使它能够用于多点触摸。我使用来自的多点触摸库。现在,在多点触摸屏幕上,我可以移动我的UML模型,调整它的大小等等 但是我无法从包资源管理器获取信息。我试图在屏幕上找到PackageExplorer和IJavaElements的位置,但失败了。我的想法是将我手指

我编写了一个eclipse插件,在视图部分将一些Java类可视化为UML。您可以在软件包浏览器中选择一个软件包,然后在右键单击该软件包后,可以通过单击菜单中自行创建的命令菜单项来可视化该软件包。可视化是使用预使用库创建的。 我的下一个目标是使它能够用于多点触摸。我使用来自的多点触摸库。现在,在多点触摸屏幕上,我可以移动我的UML模型,调整它的大小等等

但是我无法从包资源管理器获取信息。我试图在屏幕上找到PackageExplorer和IJavaElements的位置,但失败了。我的想法是将我手指上的x和y点(我从PQL实验室SDK获得)与Ijava元素的x和y坐标进行比较。我从一开始就失败了,我无法让接触点识别它是否在PackageExplorer视图的边界中。我得到的唯一的东西是整个展览的范围。我搜索了互联网和stackoverflow,但没有找到有用的东西


我不知道这是否可行,但如果有人能给我提供信息或引导我找到好的链接,我会非常感激。

我对包资源管理器不太了解,但对于项目资源管理器(Common Navigator)(您也应该解决这个问题),有一个与之相关的TreeViewer(在本例中,类是CommonViewer)。您可以通过执行CommonNavigator.getCommonViewer()来实现这一点。一旦拥有TreeViewer,就可以访问底层的SWT树,然后使用标准SWT方法获取树相对于封闭窗口的位置。还有一些方法可以获取树单元的边界。看看SWT代码片段(Google it)可以帮助您使用该树


对于PackageExplorer,它将是类似的;您必须查看源代码

如Francis的回答所述,您应该能够获得
TreeViewer
,而
TreeViewer#getControl()
将提供底层控件


当您通过
control.getBounds()
获取控件的位置和大小时,它们将与shell/窗口的坐标相关。如果需要绝对显示/屏幕坐标,请参见
control.toDisplay(some\u x,some\u y)

我想分享我解决问题的步骤。在这些建议之后,我深入研究了JavaIDE的JDTJava基础设施。为了获得包资源管理器的TreeViewer,我必须将“PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().findView(“org.eclipse.jdt.ui.PackageExplorer”)”转换为“org.eclipse.jdt.internal.ui.packageview.PackageExplorerPart”中的“PackageExplorerPart”。我采取的进一步措施是:

treeViewer=packageExplorerPart.getTreeViewer()

tree=(tree)treeViewer.getControl()


之后,我创建了一个坐标为x和y的“点”,通过触摸屏幕传递。但是,点的位置代表了整个屏幕,为了获得PackageExplorer的正确坐标,我使用方法tree.toControl(…)转换了点。最后,我用方法tree.getItem(..)检查了是否给出了一个条目。

Hi,谢谢你的建议Francis Upton。对不起,也许我的回答来得有点晚。