侦听容器本身和子按钮的操作

时间:2017-05-22 12:00:37

标签: codenameone

我被困住了。我想知道当ActionEvent传递给LeadComponent时用户指向的组件。

在我的情况下,我想知道用户是否按下ContainerButton所包含的Container或特定LeadComponent中的任何一点。但ButtonActionEvent.getActualComponent()不一样,也不应该相同。如果用户点击绿色框,则必须将某些文本复制到剪贴板,如果按下地图按钮,则应触发另一个功能(见下图)。 遗憾的是,{} {}}和ActionEvent.getSource()在引用LeadComponent收到的事件时都返回ButtonActionListener,我添加到地图按钮,不会收到任何事件。有没有解决方案?

green box with map button

在我知道subButton.setBlockLead(true)是正确的调用之后,我仍然遇到子按钮没有收到任何动作事件的问题。在我检查测试用例时,我发现该问题与底层Component相关联(在我的情况下,它是MapComponent,但它也可能是普通的Container)。在这种情况下,子按钮不会收到任何事件:

Subbutton does not receive any events

这不起作用(follow没有收到任何事件):

    Container current = f.getContentPane();

    // box with leading behavior
    Button lead = new Button("Leading");
    Button follow = new Button("Following");
    Label justData = new Label("Just Data");
    Container cnt = FlowLayout.encloseIn(lead, justData, follow);
    cnt.setUIID("ToastBar"); //to emphasize the lead area
    cnt.setLeadComponent(lead);
    follow.setBlockLead(true);

    lead.addActionListener(e -> Log.p("Lead pressed"));
    follow.addActionListener(e -> Log.p("Follow pressed"));

    //child for LayeredLayout (positioning the box)
    Container child = BorderLayout.centerAbsolute(cnt);

    //LayeredLayout with dummy container and the specific child on top
    cnt = LayeredLayout.encloseIn(new Container(), child);

    current.add(cnt);

layered layout issue

1 个答案:

答案 0 :(得分:0)

您可以使用unleading

从主要组件层次结构中排除特定组件
delete.setBlockLead(true);

这对我有用,只发送正确的事件:

Button lead = new Button("Leading");
Button follow = new Button("Following");
Label justData = new Label("Just Data");
Container cnt = FlowLayout.encloseIn(lead, justData, follow);
cnt.setLeadComponent(lead);
follow.setBlockLead(true);

lead.addActionListener(e -> Log.p("Lead pressed"));
follow.addActionListener(e -> Log.p("Follow pressed"));
current.add(cnt);