如何将点击侦听器或上下文菜单添加到 Vaadin 的网格列 Header

How to add click listener or context menu to Vaadin's Grid column Header

此题与类似。但我对 Vaadin 14 很感兴趣,因为我正在将旧的 Table 组件迁移到网格。不再有 HeaderClickListener。因此,如何在 Grid header.

上实现点击监听器?

我不介意添加一个带有用于复制的列选择的上下文菜单,但据我了解,没有API获取列中的数据?

在 Vaadin 14 中没有 HeaderClickListener。相反,你需要做这样的事情:

Column<MyBean> column = grid.addColumn(..)
HeaderRow headerRow = this.getHeaderRows().get(0); // Get first header row
Div component = new Div(); // Just example, anything that has click listener can be used
component.setText("Header");
headerRow.getCell(column).setComponent(component);
component.addClickListener(..);

或者您可以使用 GridContextMenu

grid.addColumn(..).setId("column");
GridContextMenu<MyBean> menu = grid.addContextMenu();
item.addMenuItemClickListener(event -> {
    Notification.show(selectedColumn);
});
menu.addGridContextMenuOpenedListener(event -> {
    // item is not present when clicking header
    if (!event.getItem().isPresent()) {
        event.getColumnId().ifPresent(id -> {
            selectedColumn = id;
        });
    } else {
        menu.close(); // Do not let menu open on body
    }
});