当前位置: 首页 > 知识库问答 >
问题:

使用SelectionMode.Multi,向Vaadin网格添加/创建行的click事件?

阳福
2023-03-14

我试图创建一个小型应用程序,在该应用程序中,Vaadin网格中存储了各种文件位置,网格目前只显示两列--IDfile name,我希望在单击一行时也看到文件位置作为通知。

意思是,每次单击网格中的一行时,我都希望它使用notification.show()显示位置,如下所示:

由于我的网格选择模型是multi,默认情况下,单击监听器不能注册它点击了哪一行,并且通过复选框选择行不是我希望显示的数据。简单地说,我希望为我单击的每一行获取项目,并将位置显示为通知。

到目前为止,我找到了一个类似问题的解决方案,但它处理的是Vaadin网格中的列和行,与我习惯的不同。

public static <T> void addColumnClickListener(Grid<T> grid, Consumer<Column<T>> listener)
    {
        String expression = "function(){const col=element.getEventContext(event).column;return col ? col.id : '';}()";
        grid.getElement().addEventListener("click", e -> 
        {
            String colId = e.getEventData().getString(expression);
            Optional<Column<T>> column = grid.getColumns().stream().filter(col -> colId.equals(col.getId().get())).findFirst();
            column.ifPresent(listener);
        }
        ).addEventData(expression);
    }

我将这样调用函数:

addColumnClickListener(grid, column -> Notification.show("fubar"));

这个代码片段来自Vaadin论坛,我不太明白。字符串表达式似乎包含可能的JavaScript代码,其余部分覆盖列的类型。(我想,我真的不完全理解这个片段)

共有1个答案

鞠乐
2023-03-14

您可以使用网格上的ItemClickListener来实现这一点:

grid.addItemClickListener(item -> {
    Notification.show(String.format("File location: %s", item.getLocation()));
});
 类似资料:
  • 我正在考虑这个问题的解决方案,但我不知道如何去做: 我的实体< code>StudentBook具有以下属性: 来自数据库的数据,它们看起来像: 字母字符可以用数值表示为 现在我想这样做: 将是学生的姓名 第一列将自动生成选定月份的天数(日期) “行”将具有点来自表-每个对应的日期 最后一行将类似于“总和行”,显示中每个学生的。 所以我创建了网格 方法返回 将学生的名字添加到各个< code >列

  • 为了测试目的,我正在玩vaadin 14.2.2。然而,我立即使用网格解决了第一个问题。https://vaadin.com/docs/v14/flow/components/tutorial-flow-grid.html中的示例 不在可视化中生成输出。还有几个要使用的GitHub问题中的提示 不能解决这个问题。有人知道怎么解决这个问题吗?

  • 我知道如何处理MenuItems的操作。我只需要动态网格窗格的帮助。 GridPanes有一个内置的函数addRow,也许它是一个可以使用的函数。我该怎么解决这个?谢谢!感谢所有的提示。

  • 是否可以将汇总行添加到Vaadin网格中? 我目前有一个网格,它有一个标题行来连接列,并在顶部提供了一个良好的概述。但是,我想在整个网格中添加类似的标题,以便标记一节的结束。似乎只能在header部分添加header,这将简单地填充网格的头部。页脚在底部也会这样做。 但是,如果我希望在网格中有一个特殊的行,而不必创建新的网格组件,该怎么办?一个可视的数据分隔符。

  • 本文向大家介绍vaadin 使用Maven创建Vaadin项目,包括了vaadin 使用Maven创建Vaadin项目的使用技巧和注意事项,需要的朋友参考一下 示例 使用Maven,您可以创建具有vaadin-archetype-application原型的Vaadin项目。您也可以在IDE中添加该原型,以使用IDE创建Maven项目。 一旦执行了以上命令,您将具有以下项目结构。 创建的默认Mav

  • 我正在尝试在联接。但是对我来说,缺少一个功能。我为员工创建了,这些网格分为特定的部门,但有员工,这些员工仅在部门中。 不允许在一上添加。 所以结果应该是这样的: 即使< code>Vaadin不直接允许,有什么解决方案可以让我这样做吗? 因为如果我尝试过,它会引发异常