Codenameone 如何使容器即使包含一个按钮也可以拖动?

Codenameone 如何使容器即使包含一个按钮也可以拖动?,codenameone,Codenameone,在可拖动的容器中使用span按钮似乎会破坏某些东西,因为容器无法再拖动。怎样做才能使容器即使有一个按钮也可以拖动 我试图理解CN1代码,但我很难理解。我的猜测是,罪魁祸首是一个SpanButton使其内部的按钮在它自己的容器中处于领先地位,但我不明白为什么这样会阻止容器在它们的级别上具有另一个领先地位 我还注意到在下面的测试代码(第一个示例)中,设置一个容器draggable不起作用,除非其中的一些(任意的?)内容被引导。不知道为什么,我还没有在文档或这里找到任何解释 Form hi = new

在可拖动的容器中使用span按钮似乎会破坏某些东西,因为容器无法再拖动。怎样做才能使容器即使有一个按钮也可以拖动

我试图理解CN1代码,但我很难理解。我的猜测是,罪魁祸首是一个SpanButton使其内部的按钮在它自己的容器中处于领先地位,但我不明白为什么这样会阻止容器在它们的级别上具有另一个领先地位

我还注意到在下面的测试代码(第一个示例)中,设置一个容器draggable不起作用,除非其中的一些(任意的?)内容被引导。不知道为什么,我还没有在文档或这里找到任何解释

Form hi = new Form("SpanButton ", BoxLayout.y());
{
    Button button1 = new Button("Normal Button, no lead");
    Container draggableContainer = BorderLayout.centerCenterEastWest(button1, new Button("Other"), null);
    draggableContainer.setDraggable(true);
    hi.add(draggableContainer);
    //observation: container not draggable 
}
{
    Button button2 = new Button("Normal Button, lead");
    Container draggableContainer = BorderLayout.centerCenterEastWest(button2, new Button("Other"), null);
    draggableContainer.setDraggable(true);
    draggableContainer.setLeadComponent(button2); //undocumented why a draggable Container doesn't work without a LeadComponent
    hi.add(draggableContainer);
    //observation: container draggable 
}
{
    SpanButton button3 = new SpanButton("SpanButton, lead");
    Container draggableContainer = BorderLayout.centerCenterEastWest(button3, new Button("Other"), null);
    draggableContainer.setDraggable(true);
    draggableContainer.setLeadComponent(button3);
    hi.add(draggableContainer);
    //observation: container not draggable (well, "Other" can initiate a drag, but container disappears
}
hi.show();

我已经将这个测试用例添加到我们的示例中,并做了一些修改,以便它现在可以正常工作。


这些将包含在明天的更新中。

顺便说一句,我的应用程序中已经有了带有span按钮的可拖动容器,而且直到最近才开始工作。所以,可能是CN1最近的变化打破了这一局面。我不能确定,但上面的测试代码似乎表明它可能是CN1中的一个回归。几个月前我们对主要组件的行为做了一些更改。可能是这个承诺,我会问的谢谢你的调查。我试图在调试模式下跟踪代码,我得到的印象可能是,当从Component.isDragAndDropOperation(int x,int y)调用LeadUtil.leadParentImpl(Component)来搜索lead容器时,搜索会先进入深度,然后会选择嵌入的lead组件(如Span按钮)未设置为可拖动的。ISDRAGANDDROPERATION代码是由Steve在三月份修改的,因此在时间上可以对应。超级感谢Steve和Shai!我已经测试了您的更改,我的代码再次正常工作。