【问题标题】:How to use ContextMenu with Grid in Vaadin Flow?如何在 Vaadin Flow 中使用 ContextMenu 和网格?
【发布时间】:2018-09-16 15:07:13
【问题描述】:

当使用 Vaadin Flow (11.0.0) 时,应该可以使用 GridContextMenu (1.0.0)。请参阅问题https://github.com/vaadin/vaadin-context-menu-flow/issues/5

这是我目前所拥有的:

@Route("menu")
public class MenuTestView extends VerticalLayout {

    public MenuTestView() {
        final Grid<String> g = new Grid<>();
        g.setWidth("20em");
        g.addColumn(s -> s).setHeader("Word");
        g.addColumn(s -> s.length()).setHeader("Length");
        g.setItems("The quick brown fox jumps over the lazy dog".split("\\s+"));

        final Label label = new Label();

        final ContextMenu contextMenu = new ContextMenu();
        contextMenu.setTarget(g);

        contextMenu.addItem("Item 1", e -> label.setText(e.getSource().getText()));
        contextMenu.addItem("Item 2", e -> label.setText(e.getSource().getText()));

        add(g, label);
    }

}

问题:

  • 有 Vaadin Flow 的示例吗?
  • 在我们的用例中,ContextMenu 只有在悬停在选定行上时才应启用。如何做到这一点?
  • 如何根据激活上下文菜单时的鼠标位置选择一行?

【问题讨论】:

    标签: vaadin vaadin-flow


    【解决方案1】:

    vaadin-grid-flow 1.2 带来了特别支持,使网格和上下文菜单可以很好地结合在一起。它是三天前发布的。以前可以让它们一起工作,但是事件没有告诉上下文菜单是在哪个项目上触发的。见https://github.com/vaadin/vaadin-grid-flow/releases/tag/1.2.0

    您可以通过将以下内容添加到 pom.xml 来将您的网格升级到 1.2。

    <dependency>
        <groupId>com.vaadin</groupId>
        <artifactId>vaadin-grid-flow</artifactId>
        <version>1.2.0</version>
    </dependency>
    

    以下是测试中的示例用法:https://github.com/vaadin/vaadin-grid-flow/blob/master/src/test/java/com/vaadin/flow/component/grid/it/ContextMenuGridPage.java

        GridContextMenu<Person> contextMenu = grid.addContextMenu();
        contextMenu.addItem("Show name of context menu target item", e -> {
            String name = e.getItem().map(Person::getName)
                    .orElse("no target item");
            message.setText(name);
        });
    

    【讨论】:

    • 太棒了!剩下的问题是,从用户体验的角度来看,在菜单选择之前选择行会很好,所以当菜单弹出时。这不支持 afaik?
    • 你的意思是右键单击会选择行并打开它的上下文菜单?我认为不支持这种情况。
    • 是的,完全正确。因为否则,如果已经选择了一行并且鼠标位于另一行,则可能会使用户感到困惑
    猜你喜欢
    • 1970-01-01
    • 2019-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-31
    • 1970-01-01
    • 2020-10-27
    • 1970-01-01
    相关资源
    最近更新 更多