2014-04-03 30 views
0

情况变化与GWT-DND 3.3.0

下降移动控件我正在写一个AdminTool中通过浏览器来改变基于GWT GUI。 我希望管理员使用拖放来创建和更改GUI。

为了实现我使用GWT-DND 3.3.0

我在AdminTool中一个工具栏,从中我可以拖动不同的对象DND。 工具栏中的每个对象都是一个纯文本的HTML小部件,其中包含文本。

我想更改小部件时,它应该从HTML小部件改为我喜欢使用的原始小部件。

问题&试图解决

此刻,我可以改变滴小部件,那么它抛出一个异常,“移动部件”没有从网页上删除。 “移动部件”仍然是dragable并显示“移动designe”

我认为出现这种情况,是因为拖动或Drophandler不知道移动部件,因为我改变了下降部件...

这里是代码:

dragController.addDragHandler(new DragHandler(){ 
    public void onDragEnd(DragEndEvent event) { 
    ... 
    } 
    public void onDragStart(DragStartEvent event) { 
     ... 
    } 
    public void onPreviewDragEnd(DragEndEvent event) 
      throws VetoDragException { 
     final DragContext mycontent = event.getContext(); 
     List<Widget> mywl = mycontent.selectedWidgets; 
     for(int i = 0; i < mywl.size(); i++) 
     { 
      String stemp = ((HTML)mywl.get(i)).getText(); 
      if(stemp.contains("Container")&&!stemp.contains("SubContainer")) 
      { 
       FlowPanel mypanel = new FlowPanel(); 
       HTML htmltemp = new HTML("Label"); 
       htmltemp.setStyleName("edit-dndcontainer"); 
       mypanel.add(htmltemp); 
       mypanel.setStyleName("edit-dndcontainer"); 

       mywl.add(i, mypanel); 
       dragController.makeDraggable(mypanel); 
       mywl.get(i).removeFromParent(); 
       mywl.remove(i+1); 

       mycontent.selectedWidgets = mywl; 
      } 
      else if(stemp.contains("Label")) 
      { 
       ... 
      } 
      else 
      { 
       ... 
       throw new VetoDragException(); 
      } 
     } 
    } 
    public void onPreviewDragStart(DragStartEvent event) 
      throws VetoDragException 
    { 
     ... 
    } 
}); 

问题

  • 是GWT-DND正确的lib使用这种行为,还是应该使用本机GWT的dnd?
  • 如何在gwt-dnd上更改dnd-widget?

感谢您的帮助

+0

我觉得小部件仍连接到其的DragController它在它的目的地被丢弃后也。尝试注销与DragController关联的DropController。 http://www.lewin.nu/sysinfo/manuals/com/allen_sauer/gwt/dnd/client/PickupDragController.html#unregisterDropController(com.allen_sauer.gwt.dnd.client.drop.DropController) – suprasad

+0

它没有影响取消注册小部件,我也尝试在DragController上重置Cache()。但没有成功。我认为我使用GWT的本地dnd支持更快。所以我可以dnd数据,并从数据创建正确的小部件。 – i3luefire

回答

0

我的做法是不坏,但不是与DragContext工作,我与getSelectedWidgets工作()。迭代器()从的DragController。

编辑

我转我的代码onDragEnd(),在这种情况下,我没有搞砸移动部件。我将Draggable小部件更改为Panel。我只需要添加和删除它的小部件。

答案

Samplecode:

dragController.addDragHandler(new DragHandler(){ 
    public void onDragEnd(DragEndEvent event) { 
     Iterable<Widget> myiterable = myDragCTRL_subcont.getSelectedWidgets(); 
     Widget mywidget = myiterable.iterator().next(); 

     FlowPanel flowtemp = ((FlowPanel)mywidget); 
     flowtemp.add(new HTML("label")); 
     ... 
     ... 
    } 
    public void onDragStart(DragStartEvent event) { 
     ... 
    } 
    public void onPreviewDragEnd(DragEndEvent event) 
      throws VetoDragException { 
     ... 
    } 
    public void onPreviewDragStart(DragStartEvent event) 
      throws VetoDragException { 
     ... 
    } 
});