将Codename One中的组件删除到最后位置

时间:2016-01-26 03:47:24

标签: java codenameone

我已在Codename One Container中启用了拖放功能,并在其中放置了可拖动组件。我是这样做的:

container.setDropTarget(true);

对于我使用的组件setDraggable(true)

当我放在另一个子容器上方时,这大部分都能无缝地工作。如果我放在父Container内的所有子组件下面,则删除操作将失败。如果将子容器放在作为父容器区域的黑色区域中,我希望子容器最后定位。

enter image description here

this迁移。

1 个答案:

答案 0 :(得分:1)

您需要确保Container延伸到该位置,并且黑色区域确实是Container的一部分,而不是父级的一部分。

假设是这种情况,请覆盖drop中的Container方法,并确保针对该情况正确调用它。假设它是,您可以通过y参数检测位置并将组件添加到正确的位置。

public void drop(Component dragged, int x, int y) {
    int i = getComponentIndex(dragged);
    if(i > -1) {
        Component dest = getComponentAt(x, y);
        if(dest != dragged) {
            int destIndex = getComponentIndex(dest);
            if(destIndex > -1 && destIndex != i) {
                removeComponent(dragged);
                Object con = getLayout().getComponentConstraint(dragged);
                if(con != null) {
                    addComponent(destIndex, con, dragged);
                } else {
                    addComponent(destIndex, dragged);
                }
            }
        }
        animateLayout(400);
    } else {
        Container oldParent = dragged.getParent();
        if(oldParent != null) {
            oldParent.removeComponent(dragged);
        }
        Component pos = getComponentAt(x, y);
        i = getComponentIndex(pos);
        if(i > -1) {
            addComponent(i, dragged);
        } else {
            addComponent(dragged);
        }
        getComponentForm().animateHierarchy(400);
    }
}