首页 文章

GWT-可拖动视口的拖放

提问于
浏览
4

我使用GWT-dnd使视口可拖动 . 视口是固定大小的窗口,显示较大 Map 的一部分 . 如下图所示:

enter image description here

我按照这篇文章:Move ViewPort of Element Map in GWT?哪个工作正常,但我无法让它与GWT-dnd一起工作 . GWT-DND .

我创建了以下简单场景:

enter image description here

我的问题是,只有当拖动面板小于下拉面板时,我才能使GWT-dnd工作 . 在我的例子中, Map (画布),即黄色框,比视口大得多 . 如果我将视口设为拖放区域并且 Map 可拖动,则它不起作用 . 当我尝试拖动 Map 时,它将通过视口的一个边界进行调整,就是这样 .

我们想要的是:何时拖动 Map (在视口中可见的 Map 部分),而不是 Map 的位置应该更改 . 例如,当我向下拖动 Map 时,我得到了我在下图中显示的内容:

enter image description here

用户实际看到的内容如下:

enter image description here

这是我在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);

现在我有一个可拖动的红色矩形 .

How can I make my map (canvas) draggable?

我用这里的代码创建了一个项目:https://github.com/confile/test5

1 回答

  • 2

    您可以尝试不同的分层:

    第0层:画布不可拖动(基础框架约束视图端口)

    第1层: Map - 可拖动(侧面捕捉到画布层)

    第2层:视图端口 - 可拖动(通过某些句柄或通过其框架约束到画布区域)

相关问题