java - 使用 SelectionMode.MULTI 将行添加/创建点击事件到 Vaadin 网格?

标签 java vaadin vaadin-grid

我正在尝试创建一个小型应用程序,其中我将各种文件位置存储在 Vaadin 网格中,该网格当前仅显示两列 - IDFile Name ,并且每当我单击一行时,我也希望看到文件位置的通知。

意思是,每次我单击网格中的一行时,我希望它使用 Notification.show() 显示位置。 ,像这样:

rainbows (请忽略 <b></b> ,它们是不相关的。)

因为我的网格选择模型是 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"));

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

有什么方法可以做与上面的代码片段类似但针对行的事情吗?

最佳答案

您可以使用网格上的 ItemClickListener 来执行此操作:

grid.addItemClickListener(item -> {
    Notification.show(String.format("File location: %s", item.getLocation()));
});

关于java - 使用 SelectionMode.MULTI 将行添加/创建点击事件到 Vaadin 网格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60168288/

相关文章:

java - 分层死锁(具有依赖性),...或 : how do I get my "wait"s, "notify"s,设计对吗?

java - UriMatcher 没有正确匹配

java - 如何在 vaadin 中设置网格单元格样式

javascript - 无法清除 Vaadin-grid 中的输入?

java - 访问 Vaadin 8 网格单元格值

java - Mac OS 打不开 TopCoder Arena 无法打开

java - 如何使用 Stream 将 MultiValueMap<String,String> 转换为 Map<String, List<Long>>?

html - Vaadin 标签对齐

java - 如何将 FileResource 加载到字节数组中?

java - Spring Prototype作用域bean,配置设计模式