1,页面元素
<window id="dropDemoWin" apply="controller.DropDemoController"> <listbox> <listitem id="draged1111111111" draggable="true" droppable="true" onDrop="dropDemoWin$composer.onDropListitem(event)"> </listbox> </window>
如果不知道dropDemoWin$composer怎么来的看这里【zk开发】如何在页面中获得composer对象
2,将拖放的组件添加进来 onDropListitem
public class DropDemoController extends GenericAutowireComposer {
public void onDropListitem(DropEvent event) {
if (!(event.getDragged() instanceof Listitem)) {
// ZkUtils.showError("some errors");
return;
}
// event.getDragged()获得你托动过来的组件
Listitem draggedListitem = (Listitem) event.getDragged();
// event.getTarget()是你释放鼠标,鼠标下的那个组件,即draggedListitem将要放在那个组件上,或下
Listitem targetListitem = (Listitem) event.getTarget();
// //放在目标组件之前
// targetListitem.getParent()
// .insertBefore(draggedListitem, targetListitem);
//当然你也可以放在目标组件之后
//
Component afterComp=targetListitem.getNextSibling();
//后一个组件是托过来的组件,什么都不做
if(afterComp ==draggedListitem){
return;
}
if(afterComp==null){//如果没有下一个组件说明target是最后一个,直接添加到listbox里
draggedListitem.detach();
draggedListitem.setParent(targetListitem.getParent());
}else{//注意这里的insertBefore的第二个参数
targetListitem.getParent().insertBefore(draggedListitem, afterComp);
}
}
}