将小部件放在AbsolutePanel gwt dnd之外

时间:2013-02-02 14:53:11

标签: gwt drag-and-drop

我试图将可拖动的小部件从边界面板中删除(AbsolutePanel)。在我的情况下,可拖动的小部件是一个图像。我想放弃它,以便只能看到图像的一部分,但是当我放下它,并且图像的某些部分超出绝对面板时,它会自动掉落在绝对面板内。 我试过了:

dragController.setBehaviorConstrainedToBoundaryPanel(假);

并认为这意味着我可以将它放在任何我想要的地方,但它不起作用。

1 个答案:

答案 0 :(得分:1)

和工作解决方案:) 这是我的代码:

public class myEntripointClass implement EntryPOint{
    AbsolutePanel droper;
    public void onModuleLoad() {
        Panel main = new AbsolutePanel();
        droper = new AbsolutePanel();
        droper.setHeight("300px");
        droper.setWidth("500px");
        main.add(droper);
        content=new AbsolutePanel();
        bt = new Button("Drag and drop it");
        content.add(bt);
        lb = new Label("Label drag and drop");
        content.add(lb);            
        main.add(content);
        manageDnD();
        RootPanel.get().add(main);
    }

    private void manageDnD() {
        PickupDragController dragController = new PickupDragController(
                (AbsolutePanel) content, true);
        dragController.makeDraggable(bt);
        dragController.makeDraggable(lb);
        dragController.addDragHandler(new DragHandler() {

            @Override
            public void onPreviewDragStart(DragStartEvent event)
                    throws VetoDragException {}

            @Override
            public void onPreviewDragEnd(DragEndEvent event) throws VetoDragException {}

            @Override
            public void onDragStart(DragStartEvent event) { 
            }
            @Override
            public void onDragEnd(DragEndEvent event) {
                // TODO Auto-generated method stub
                DragContext context = event.getContext();
                int x=context.mouseX;
                int y= context.mouseY;
                droper.add(context.selectedWidgets.get(0),x,y);
            }
        });
        NameDropController dropController = new NameDropController(droper);
        dragController.registerDropController(dropController);
        dragController.setBehaviorDragProxy(true);
    }

我的DropController类是:

public class NameDropController extends AbstractDropController{
    public NameDropController(Widget dropTarget) {
        super(dropTarget);
    }
    @Override
    public void onDrop(DragContext context) {
        int x=getDiff(getDropTarget().getAbsoluteLeft(), context.mouseX);
        int y=getDiff(getDropTarget().getAbsoluteTop(), context.mouseY);
        ((AbsolutePanel)getDropTarget()).add(context.selectedWidgets.get(0),x,y);
        System.out.print("("+context.mouseX+"::,::"+context.mouseY+")");
      }

    @Override
    public void onMove(DragContext context){
    }

    private int getDiff(int val1,int val2){
        return Math.abs(val1-val2);
    }
}