0

我编写了一个 Eclipse 插件,将一些 Java 类可视化为视图部分中的 UML。您在包资源管理器中选择一个包,然后单击该包后,您可以通过单击菜单中的自创命令菜单项来将其可视化。可视化是使用 prefuse 库创建的。我的下一个目标是让它能够用于多点触控。我使用PQLabs multitouch SDK的 Multitouch Library 。现在,在多点触控屏幕上,我可以移动我的 UML 模型、调整它的大小等。

但我无法从包资源管理器中获取信息。我试图在屏幕上找出 Package Explorer 和 IJavaElements 的位置,但失败了。我的想法是将手指的 x 和 y 点(我从 PQL Labs SDK 获得)与 IJavaElements 的 x 和 y 坐标进行比较。我从一开始就失败了,我无法识别触摸点是否在 Package Explorer 视图的边界内。我唯一得到的是整个显示器的界限。我搜索了互联网和 stackoverflow,但没有找到有用的东西。

我不知道这是否可能,但当有人可以给我信息或指导我找到好的链接时,我会很感激。

4

3 回答 3

0

我对包资源管理器了解不多,但是使用项目资源管理器(通用导航器)(您也应该解决),有一个与之关联的 TreeViewer(在这种情况下,该类是 CommonViewer)。您可以通过执行 CommonNavigator.getCommonViewer() 来实现。一旦有了 TreeViewer,您就可以访问底层 SWT 树,并从那里使用标准 SWT 方法来获取树相对于封闭窗口的位置。还有一些方法可以让您获得树细胞的边界。查看 SWT Snippets (Google it) 以帮助您使用 Tree。

对于包资源管理器,它将是类似的;您将不得不查看源代码。

于 2012-07-16T17:36:40.540 回答
0

如弗朗西斯的回答中所述,您应该能够获得TreeViewer,TreeViewer#getControl()并将提供基础控制。

当您通过 获取控件的位置和大小时control.getBounds(),这些将相对于外壳/窗口的坐标。如果您需要绝对显示/屏幕坐标,请参阅control.toDisplay(some_x, some_y)

于 2012-07-17T00:01:04.493 回答
0

我想分享我如何解决问题的步骤。根据这些建议,我深入研究了 Java IDE 的 jdt Java 基础架构。要获得 Package Explorer 的 TreeViewer,我必须将“ PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().findView("org.eclipse.jdt.ui.PackageExplorer ")”转换为“PackageExplorerPart”在“ org.eclipse.jdt.internal.ui.packageview.PackageExplorerPart ”中。我做的进一步步骤是:

treeViewer = packageExplorerPart.getTreeViewer();

树 = (树) treeViewer.getControl();

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

于 2012-08-02T15:06:13.617 回答