我使用
GWT-dnd来使视口可拖动.视口是固定大小的窗口,显示较大地图的一部分.如下图所示:
我按照这篇文章:Move ViewPort of Element Map in GWT?工作正常,但我无法让它与GWT-dnd一起工作. GWT-DND.
我创建了以下简单场景:
我的问题是,只有当拖动面板小于下拉面板时,我才能使GWT-dnd工作.在我的例子中,地图(画布),即黄色框,比视口大得多.如果我将视口设为拖放区域并且地图可拖动,则它不起作用.当我尝试拖动地图时,它将通过视口的一个边界进行调整,就是这样.
我们想要的是:何时拖动地图(在视口中可见的地图部分),而不是地图的位置应该更改.例如,当我向下拖动地图时,我得到了我在下图中显示的内容:
用户实际看到的内容如下:
这是我在ScreenView.ui.xml文件中所做的:
<g:AbsolutePanel ui:field="viewport" addStyleNames="{resources.screenCss.viewportContainer}">
<g:FocusPanel ui:field="canvasFocus"
addStyleNames="{resources.screenCss.focusPanel}">
<g:AbsolutePanel ui:field="canvas"
addStyleNames="{resources.screenCss.canvas}">
<g:HTMLPanel addStyleNames="{resources.screenCss.mapContainer}">
<g:FlowPanel ui:field="test1" addStyleNames="{resources.screenCss.test1}">
<g:HTML>test1</g:HTML>
</g:FlowPanel>
<g:FlowPanel ui:field="test2" addStyleNames="{resources.screenCss.test2}">
<g:HTML>test2</g:HTML>
</g:FlowPanel>
</g:HTMLPanel>
</g:AbsolutePanel>
</g:FocusPanel>
</g:AbsolutePanel>
在我的ScreeView.java中,我做:
@UiField
AbsolutePanel viewport;
@UiField
AbsolutePanel canvas;
@UiField
FlowPanel test1;
private PickupDragController dragController;
private DropController dropController;
// create drag controller
dragController = new PickupDragController(viewport, true);
// create drop controller
dropController = new AbsolutePositionDropController(canvas);
dragController.registerDropController(dropController);
// make test1 draggable
FocusPanel focusPanel = new FocusPanel();
focusPanel.addStyleName(resources.screenCss().noteFocusPanel());
test1.add(focusPanel);
canvas.add(test1);
dragController.makeDraggable(test1, focusPanel);
现在我有一个可拖动的红色矩形.
如何使我的地图(画布)可拖动?
我用这里的代码创建了一个项目:https://github.com/confile/test5
最佳答案 您可以尝试不同的分层:
第0层:画布不可拖动(基础框架约束视图端口)
第1层:地图 – 可拖动(侧面捕捉到画布层)
第2层:视图端口 – 可拖动(通过某些句柄或通过其框架约束到画布区域)