Java 如何防止onclick事件传播到Vaadin中的子元素?

Java 如何防止onclick事件传播到Vaadin中的子元素?,java,vaadin,Java,Vaadin,我需要在单击图像元素时执行一个事件,另一方面,在单击UI.getCurrent()元素时执行另一个不同的事件 我在UI元素中有一个绝对布局(leftLayout),其中有一个图像 实际上,当我在图像中单击时,两个事件被触发:显示“游戏结束”通知,下面显示“良好”通知 如何防止onclickUI.getCurrent()事件传播到image元素? public class VaadinmatchinggameUI extends UI{ //... private AbsoluteLa

我需要在单击图像元素时执行一个事件,另一方面,在单击
UI.getCurrent()
元素时执行另一个不同的事件

我在UI元素中有一个绝对布局(leftLayout),其中有一个图像

实际上,当我在图像中单击时,两个事件被触发:显示“游戏结束”通知,下面显示“良好”通知

如何防止onclick
UI.getCurrent()
事件传播到image元素?

public class VaadinmatchinggameUI extends UI{
   //...
   private AbsoluteLayout leftLayout = new AbsoluteLayout();
   ///...
    @Override
    protected void init(VaadinRequest request) {
     //...
     UI.getCurrent().addClickListener(new ClickListener() {

        @Override
        public void click(ClickEvent event) {
            Notification.show("Game Over");
        }
    }); 
     addImg();
    }
    private void addImg() {
      //...
      FileResource resource = new FileResource(new File(PATH));
      Image face = face = new Image(null, resource);
      leftLayout.addComponent(face, "top:" + randomTop 
                    + "px; left:" + randomLeft + "px;");
      face.addClickListener(new ClickListener() {
            @Override
            public void click(ClickEvent event) {
                Notification.show("Good", Notification.Type.HUMANIZED_MESSAGE);
            }
        });

    }
}

解决方案是在布局上添加click listener,并在捕获时单击check click position

请参阅下面的代码:

// Listen for layout click events
layout.addListener(new LayoutClickListener() {
 public void layoutClick(LayoutClickEvent event) {

     // Get the child component which was clicked
     Component child = event.getChildComponent();

     if (child == null) {
         // Not over any child component
         getWindow().showNotification(
                 "The click was not over any component.");
     } else {
         // Over a child component
         getWindow().showNotification(
                 "The click was over a "
                         + child.getClass().getCanonicalName());
     }
 }
});
您可以在链接上找到完整的示例:


此代码针对Vaadin 6进行了测试,但稍作修改后也适用于Vaadin 7。

谢谢,我使用的是Vaadin 7.6.3版,无需修改即可正常工作