不能';t使用vaadin 7捕获双击事件
我正在学习瓦丁框架。我正在尝试捕获项目单击侦听器的双击事件。但它并没有像预期的那样工作。请参考下面的代码不能';t使用vaadin 7捕获双击事件,vaadin,vaadin7,vaadin-grid,Vaadin,Vaadin7,Vaadin Grid,我正在学习瓦丁框架。我正在尝试捕获项目单击侦听器的双击事件。但它并没有像预期的那样工作。请参考下面的代码 grid.addItemClickListener(e -> { if(e.isDoubleClick()) { System.out.println("Double click"); } else { System.out.println("Single click");
grid.addItemClickListener(e -> {
if(e.isDoubleClick()) {
System.out.println("Double click");
} else {
System.out.println("Single click");
}
});
当我双击网格项时,它仅被视为一次单击 问题中提到的是setEditorEnabled(true)
,因为这可以防止触发双击事件(因为网格上的双击事件似乎是Vaadin内部使编辑器可见的触发器)
我创建了一个似乎有效的工作环境(您应该测试/评估所有事情是否真正按照预期工作),这样您就可以:
e.isDoubleClick()
)
然后您必须使用一个类来扩展网格并重写方法doCancelEditor()
。在该方法中(当单击“取消”按钮时调用该方法,和单击“保存”按钮后调用该方法(提交后)),然后在按下“取消”和/或“保存”按钮后再次禁用编辑器
扩展网格:
public class ExtendedGrid extends Grid {
@Override
protected void doCancelEditor() {
super.doCancelEditor();
setEditorEnabled(false);
System.out.println("Editor disabled during doCancelEditor");
}
}
MyUI:
@覆盖
受保护的void init(VaadinRequest VaadinRequest){
Grid Grid=新的扩展网格();
BeanItemContainer=新的BeanItemContainer(Person.class);
addBean(新人(“马可”,“测试”));
grid.setContainerDataSource(容器);
grid.addItemClickListener(e->{
如果(如isDoubleClick()){
grid.setEditorEnabled(true);
BeanItem item=(BeanItem)e.getItem();
editItem(item.getBean());
System.out.println(“双击”);
}
});
设置内容(网格);
}
谢谢@codinghaus。这个解决方案在我们双击时运行良好,但它也调用了我为单键单击编写的功能。例如,对于一次单击,我们有记录的弹出窗口,其中详细显示了信息。因此,双击调用了单键单击和双击的功能。有什么建议吗?所以您添加了第二个侦听器,带有if(!e.isDoubleClick())
?我没有尝试过,但我想说这是工作的预期。双击包括一次单击和随后的第二次单击。所以我认为触发两个单击侦听器是可以的。代码如何知道第一次单击不是“真正的”单击,而是双击的一部分?必须有一种机制,在单击后等待,并查看是否有第二次单击。。我想你不能那样做。也许你应该将“打开信息弹出”逻辑移动到一个按钮上,而不是“单击”打开它。谢谢你的建议@codinghaus
@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);
}