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),其中有一个图像
实际上,当我在图像中单击时,两个事件被触发:显示“游戏结束”通知,下面显示“良好”通知
如何防止onclickUI.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版,无需修改即可正常工作