我被困住了。我想知道当ActionEvent
传递给LeadComponent
时用户指向的组件。
在我的情况下,我想知道用户是否按下Container
或Button
所包含的Container
或特定LeadComponent
中的任何一点。但Button
和ActionEvent.getActualComponent()
不一样,也不应该相同。如果用户点击绿色框,则必须将某些文本复制到剪贴板,如果按下地图按钮,则应触发另一个功能(见下图)。
遗憾的是,{} {}}和ActionEvent.getSource()
在引用LeadComponent收到的事件时都返回Button
,ActionListener
,我添加到地图按钮,不会收到任何事件。有没有解决方案?
在我知道subButton.setBlockLead(true)
是正确的调用之后,我仍然遇到子按钮没有收到任何动作事件的问题。在我检查测试用例时,我发现该问题与底层Component
相关联(在我的情况下,它是MapComponent
,但它也可能是普通的Container
)。在这种情况下,子按钮不会收到任何事件:
这不起作用(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);
答案 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);