Button dragButton = new Button("Draggable Button"); Draggable draggaable = new Draggable(dragButton);
现在dragButton就可以被拖拽了。新的安放地点会以蓝色的虚线框,随着鼠标显示出来。
默认情况,dragButton(一个有被拖拽能力的component)可以被拖拽到任何地方。当然,我们可以通过setConstrainVertical()和setConstrainHorizontal()方法,去设置禁止横向或纵向移动。
Button dragButton = new Button("Draggable Button"); Draggable draggable = new Draggable(dragButton); draggable.setConstrainVertical(true);
其容器里面的objects也可以被移动或者复制出来。当然也可以通过设置,其objects只允许可以被拖拽到哪里去。
当用户正在拖拽某一个component的时候,DNDEvent事件就会被自动触发传入到onDragStart()方法里。我们可以利用这一点,在DragSource新建实例的时候,Override DragSource.onDragStart(DNDEvent event)方法,用DNDEvent.setData()来设置object
DragSource source = new DragSource(component) { @Override protected void onDragStart(DNDEvent event) { event.setData(component); } };
如下是他们之间的实现关系
Grid | GridDragSource |
ListView | ListViewDragSource |
TreeGrid | TreeGridDragSource |
TreePanel | TreePanelDragSource |
一个DropTarget会负责一连串的事情——首先,判断当前正在被拖动的object是否被允许拖入进来;并且会有可视化的指示标记。
当有object被拖入进来的时候,DNDEvent事件就会被自动触发传入到onDragDrop()方法里。我们可以利用这一点,在DropTarget新建实例的时候,Override DropTarget.onDragDrop(DNDEvent event)方法,通过DNDEvent.getData()来获得object。
DropTarget target = new DropTarget(component) { @Override protected void onDragDrop(DNDEvent event) { super.onDragDrop(event); Object data = event.getData(); }
DND.Operation枚举了两种移动方式:COPY , MOVE。MOVE是默认的移动方式——意味着object被拖拽出来之后,在DragSource里再找不到其object。
target.setOperation(DND.Operation.MOVE);
Grid | GridDropTarget |
ListView | ListViewDropTarget |
TreeGrid | TreeGridDropTarget |
TreePanel | TreePanelDropTarget |
简单的实现方式是:调用setGroup(),传入一个String类型的参数去指定DragSource和DropTarget是在同一个组内。当一个DropTarget设置好group之后,那么他就会接收同一个group的DregSource的object。