无法使用Vaadin 7捕获双击事件

时间:2019-04-29 12:12:34

标签: vaadin vaadin7 vaadin-grid

我正在学习Vaadin框架。我正在尝试捕获项目单击侦听器的双击事件。但是它没有按预期工作。请参考下面的代码,

grid.addItemClickListener(e -> {
        if(e.isDoubleClick()) {
            System.out.println("Double click");
        } else {
            System.out.println("Single click");             
        }
});

当我双击网格项目时,仅被视为一次单击。

1 个答案:

答案 0 :(得分:3)

Doubleclick listener on Vaadin Grid中所述,问题是setEditorEnabled(true),因为这会阻止DoubleClick-Event被触发(因为网格上的双击事件似乎是Vaadin相互创建编辑器的触发因素可见)。

我创建了一个似乎可行的解决方法(您应该测试/评估所有内容均按预期工作),以便您同时拥有:

  1. 可以双击并添加对doubleClick有反应的监听器
  2. 已在网格上启用编辑器

诀窍是首先禁用编辑器(默认情况下处于禁用状态),然后在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);
    }