我在Vaadin7中遇到了问题。
我想在任务和列表之间创建一个拖放(任务可拖动,列表可拖放)。
我的代码正在工作,但任务总是放在列表的最底部。
这是我的代码(拖放处理程序):
@Override
public AcceptCriterion getAcceptCriterion() {
return AcceptAll.get();
}
@Override
public void drop(DragAndDropEvent event) {
DragAndDropWrapper dd = (DragAndDropWrapper)event.getTransferable().getSourceComponent();
Task t= (Task) dd.getData();
DragAndDropWrapper dd2 = (DragAndDropWrapper)event.getTargetDetails().getTarget();
List targetList = (List)dd2.getData();
String currentDraggedTaskId = t.getTask_id();
final int targetListId = Integer.parseInt( targetList.getId_list() );
try {
taskService.moveTask(currentDraggedTaskId, targetListId);
List targetListObj = (List)CollectionUtils.find(allLists, new Predicate() {
@Override
public boolean evaluate(Object object) {
List l = (List)(object);
return l.getId_list().equals(targetListId+"");
}
});
List oldList = (List)t.getParent().getParent();
oldList.removeComponent(t.getParent());
targetListObj.addComponent(t.getParent());
} catch (UnsupportedOperationException | SQLException e) {
Notification.show("err");
}
}
我知道我正在将任务添加到布局的末尾,但我如何知道任务在列表中的哪个位置被删除了?
如果有人可以帮助我,我将不胜感激:)
此致敬意马 特。
有更多/不同的信息关于放置位置,具体取决于接收放置的组件的类型。这是来自瓦丁之书(见这里):
对象提供有关确切位置的信息 放置可转移对象的位置。确切的类别 详细信息对象取决于放置目标,您需要将其强制转换为 正确的子类以获取更详细的信息。如果目标是 选择组件,本质上是树或表, AbstractSelectTargetDetails 对象告知放置所在的项 正在制造。对于树,TreeTargetDetails提供了更多详细信息。 对于包装的组件,信息在 WrapperDropDetails 对象。除了目标项目或 组件中,详细信息对象提供放置位置。供选择 组件,位置可以用getDropLocation()获得 以及带有垂直放置位置() 和 水平放置位置()。位置指定为 VerticalDropLocation 或 HorizontalDropLocation 对象。滴 位置对象指定是否删除可转移对象 组件或项的上方、下方或直接位于组件或项的上方(中间)。
因此,使用表而不是列表可能是一种解决方案。