我写了一个eclipse插件,它在视图部分将一些Java类可视化为UML。您可以在Package Explorer中选择一个包,然后单击该包后,您可以通过单击菜单中的自创命令menuitem来查看它。可视化是使用prefuse库创建的。 我的下一个目标是让它可以用于多点触控。我使用PQLabs multitouch SDK中的多点触控库。现在,在多点触控屏幕上,我可以移动我的UML模型,调整其大小等。
但是我无法从Package Explorer中获取信息。我试图在屏幕上找到Package Explorer和IJavaElements的位置但是失败了。我的想法是将我的手指(我从PQL Labs SDK获得)中的x和y点与IJavaElements的x和y坐标进行比较。我从一开始就失败了,我无法通过触摸点识别它是否在Package Explorer视图的边框中。我唯一得到的是整个显示器的界限。我搜索了互联网和stackoverflow,但没有找到有用的东西。
我不知道是否可能,但是当有人可以向我提供信息或指导我建立良好的链接时,我将不胜感激。
答案 0 :(得分:0)
我对Package Explorer知之甚少,但是使用Project Explorer(Common Navigator)(你也应该解决),有一个与之关联的TreeViewer(在这种情况下,类是CommonViewer)。您可以通过执行CommonNavigator.getCommonViewer()来实现。获得TreeViewer之后,您可以访问底层SWT树,然后使用标准SWT方法获取树相对于封闭窗口的位置。还有一些方法可以获取树状单元格的边界。看看SWT Snippets(谷歌它),以帮助您使用树。
对于Package Explorer,它将是类似的;您将不得不查看源代码。
答案 1 :(得分:0)
正如Francis的回答所述,您应该能够获得TreeViewer
,TreeViewer#getControl()
将提供基础控制。
当您通过control.getBounds()
获取控件的位置和大小时,这些将相对于shell /窗口的坐标。如果您需要绝对显示/屏幕坐标,请参阅control.toDisplay(some_x, some_y)
答案 2 :(得分:0)
我想分享一下我如何解决问题的步骤。在建议之后,我深入研究了Java IDE的jdt Java基础结构。要获取Package Explorer的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创建了一个“ Point ”,它们通过触摸屏幕传递。但是,点位置代表整个屏幕并获得Package Explorer的正确坐标我用方法tree.toControl(...)转换了点。最后,我检查了一个项目是否使用方法tree.getItem(....)。