我需要实现一个代号为1的复杂功能,该功能涉及在屏幕上移动被轻击的组件(例如Button):用户将在分层窗格中拥有一些按钮,并且他们应该能够使用手指。将我的问题抽象为尽可能通用的是这些要求:
这不是游戏。在这里,我对问题进行了抽象,以使我的要求适应多种情况。如何在Codename One中实现这些功能?
为了更好地理解我的意思,一个“简单”的用例是例如移动放置在一个圆圈中的按钮:在此示例中,用户可以点击单个按钮,或者他/她可以旋转按钮的所有圆圈按钮,同时点击按钮可以移动手指。
答案 0 :(得分:1)
您可以使用setDropTarget(true)
,并使用Container
将放置容器变成可放置的目标。完成此操作后,Container
的默认行为将使您可以在可放置容器实例之间可视化地重新排列/移动组件。您可以使用实现所需功能的更智能的方法,简单地覆盖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) {
setComponentIndex(dragged,destIndex);
}
}
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);
}
}
中的默认drop方法:
requirements.txt