以保存顺序拖放到瓦丁中



我在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 对象。滴 位置对象指定是否删除可转移对象 组件或项的上方、下方或直接位于组件或项的上方(中间)。

因此,使用表而不是列表可能是一种解决方案。

最新更新