我正在学习Vaadin框架。我正在尝试捕获项目单击侦听器的双击事件。但是它没有按预期工作。请参考下面的代码,
grid.addItemClickListener(e -> {
if(e.isDoubleClick()) {
System.out.println("Double click");
} else {
System.out.println("Single click");
}
});
当我双击网格项目时,仅被视为一次单击。
答案 0 :(得分:3)
如Doubleclick listener on Vaadin Grid中所述,问题是setEditorEnabled(true)
,因为这会阻止DoubleClick-Event被触发(因为网格上的双击事件似乎是Vaadin相互创建编辑器的触发因素可见)。
我创建了一个似乎可行的解决方法(您应该测试/评估所有内容均按预期工作),以便您同时拥有:
诀窍是首先禁用编辑器(默认情况下处于禁用状态),然后在ItemClickListener中“自行”启用编辑器(如果e.isDoubleClick()
)。
然后,您必须使用扩展Grid并覆盖方法doCancelEditor()
的类。在此方法内部(在单击“保存”按钮后单击和(在提交之后)单击“取消”按钮时将调用该方法),然后在按下“取消和/或保存”按钮之后再次禁用编辑器。
ExtendedGrid:
public class ExtendedGrid extends Grid {
@Override
protected void doCancelEditor() {
super.doCancelEditor();
setEditorEnabled(false);
System.out.println("Editor disabled during doCancelEditor");
}
}
MyUI:
@Override
protected void init(VaadinRequest vaadinRequest) {
Grid grid = new ExtendedGrid();
BeanItemContainer<Person> container = new BeanItemContainer<>(Person.class);
container.addBean(new Person("marco", "test"));
grid.setContainerDataSource(container);
grid.addItemClickListener(e -> {
if(e.isDoubleClick()) {
grid.setEditorEnabled(true);
BeanItem item = (BeanItem) e.getItem();
grid.editItem(item.getBean());
System.out.println("Double click");
}
});
setContent(grid);
}