2016-03-24 12 views
1

私は画像要素にクリックすると、イベントが実行される必要があり、IはUI.getCurrent()要素をクリックしたときに他方の側に、別の異なるイベントがVaadinの子要素へのonclickイベントの伝播を防ぐにはどうすればよいですか?

実行されるIは、UI要素AbsoluteLayout(leftLayout)内に有し、かつこの中に画像が配置されています。

実際に、画像をクリックすると、2つのイベントが発生します。「ゲームオーバー」通知が表示され、その下に「良い」通知が表示されます。

onclick UI.getCurrent()イベントのイメージ要素への伝播を防ぐにはどうすればよいですか?

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); 
      } 
     }); 

    } 
} 

答えて

2

ソリューションは、レイアウト上のクリックリスナを追加することで、あなたが確認]をクリックキャッチするときの位置をクリックします。

以下のコードを参照してください:

// 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()); 
    } 
} 
}); 

あなたがリンクを見つけることができる完全な例:ClickableLayoutBasicExample.java

このコードは、Vaadin 6のためにテストされますが、小さな変更でも7をVaadinのために動作します。

+0

ありがとうございます、私はvaadinバージョン7.6.3を使用していますが、これは変更なしでうまく動作します –

関連する問題