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

问题描述 投票:1回答:1

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

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

当我双击网格项时,它只被视为单击。

vaadin vaadin7 vaadin-grid
1个回答
3
投票

正如Doubleclick listener on Vaadin Grid中提到的,问题是setEditorEnabled(true),因为这会阻止DoubleClick事件被触发(因为看起来网格上的双击事件是Vaadin使得编辑器可见的触发器)。

我创建了一个似乎有用的解决方法(你应该测试/评估一切真的按预期工作),这样你就可以了:

  1. 可以双击并添加对doubleClicks做出反应的侦听器
  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);
    }
© www.soinside.com 2019 - 2024. All rights reserved.