我有一个用 GEF 编写的图形编辑器。在此编辑器中,可以通过拖放特定锚点来拖放元素并创建连接。
一切正常,除了当用户拖动东西时图表不会自动滚动。
我希望当用户在拖动某些东西时到达它的一侧时,图表会自动滚动。
GEF 是否支持这样的功能?应该调用哪个类/设置器来启用它?
如果不直接支持,如何着手实现呢?
我有一个用 GEF 编写的图形编辑器。在此编辑器中,可以通过拖放特定锚点来拖放元素并创建连接。
一切正常,除了当用户拖动东西时图表不会自动滚动。
我希望当用户在拖动某些东西时到达它的一侧时,图表会自动滚动。
GEF 是否支持这样的功能?应该调用哪个类/设置器来启用它?
如果不直接支持,如何着手实现呢?
第一步是让你的画布可滚动。本书第96-101页对此进行了解释。
假设您已经在 a 上绘制图形FigureCanvas
并且您正在使用FreeformFigure
s 和FreeformLayer
,您可以执行以下操作:
MouseMoveListener
在您Figure
的EditPart
. 每次检测到拖动时,在该mouseDragEvent
方法中,用 显示您的图形getViewer().reveal(EditPart.this)
。
这将导致您Figure
在被拖动时始终被显示出来。
自从我上次摆弄 GEF 以来已经有一段时间了。
拖放根本不起作用还是仅在负坐标的方向上起作用?你用的是什么布局?
IIRC,有不同的布局,其中一种(FreeForm?)支持负坐标,所以如果你只是遇到负坐标的问题,你可以尝试改变布局。
这是一个滚动图形编辑器的示例(作者说;))可能会给您一个很好的提示。
还有一个名为org.eclipse.gef.ui.parts.ScrollingGraphicalViewer的类也可能有所帮助。
不过,只有提示,因为我不知道您的代码。