【问题标题】:Scroll to the dropped object when it's released outside of the current view of a GEF editor当它在 GEF 编辑器的当前视图之外释放时滚动到放置的对象
【发布时间】:2015-01-29 09:56:15
【问题描述】:

我有一个带有可拖动图形的 GEF 编辑器。我已经覆盖了主 EditPart 的 XYLayoutEditPolicy 的 createChangeConstraintCommand。 这让我可以轻松移动(拖放)图形。

问题是,如果我将其中一个拖到当前视图之外,尽管出现了滚动并移动了图形,但视图不会自动滚动到放置的对象。

知道如何实现这种“自动滚动”功能吗? (让“选中”(拖/放)图在视图中始终可见会更好。)

【问题讨论】:

    标签: drag-and-drop autoscroll eclipse-gef


    【解决方案1】:

    鉴于已删除的editpart 对象,您应该使用EditPartViewer#reveal(EditPart) 方法。例如这样做:

    editpart.getViewer().reveal(editpart)
    

    【讨论】:

    • 我从editpart的notifyChanged方法异步调用了reveal函数(!)。这允许我在执行 changeconstraint 命令后,在对象被放下时滚动屏幕。但是我在拖动部分仍然没有成功......拖放由editpolicy控制。在这种情况下,我应该从哪里调用reveal方法?
    • 换句话说,当它被拖到视口外时,您想显示被拖拽的editpart?对吗?
    • 是的,这正是我想要的。
    • 使用 org.eclipse.draw2d.FigureCanvas.scrollSmoothTo(int x, int y)。为此,您需要在适当的坐标系中使用 x 和 y。查看 org.eclipse.gef.ui.parts.ScrollingGraphicalViewer.reveal(EditPart part) 的实现,了解坐标转换是如何进行的
    • 感谢您的建议!我已经用以下方法覆盖了 XYLayoutEditPolicy 中的 createChangeConstraintCommand 方法: Display.getDefault().asyncExec(new Runnable() {@Override public void run() {int x = request.getTransformedRectangle((Rectangle) constraint).x; int y = request.getTransformedRectangle((Rectangle) constraint).y; ((FigureCanvas) child.getViewer().getControl()).scrollSmoothTo(x, y); }});这样就成功让editpart在拖拽的时候显示出来了,但是鼠标没有停留在图上(是移位了),很烦人...
    猜你喜欢
    • 1970-01-01
    • 2012-07-27
    • 2020-09-10
    • 1970-01-01
    • 1970-01-01
    • 2014-04-15
    • 1970-01-01
    • 1970-01-01
    • 2014-11-08
    相关资源
    最近更新 更多