如何将单击侦听器或上下文菜单添加到 Vaadin 的网格列标题 [英] How to add click listener or context menu to Vaadin's Grid column Header
问题描述
这个问题类似于这个.但是我对 Vaadin 14 很感兴趣,因为我正在将旧的 Table 组件迁移到 Grids.不再有 HeaderClickListener.因此,如何在 Grid 标题上实现点击侦听器.
This question is similar to this. But I'm interested in Vaadin 14 as I am migrating old Table components to Grids. There no longer a HeaderClickListener. Therefore, how can you implement click listener on Grid header.
我不介意添加带有用于复制的列选择的上下文菜单,但据我所知,没有用于获取列中数据的 API?
I don't mind adding a context menu with a column selection for copying, but as I understand it, there is no API to get data in a column?
推荐答案
在 Vaadin 14 中没有 HeaderClickListener.相反,您需要执行以下操作:
In Vaadin 14 there is no HeaderClickListener. Instead you need to do something like this:
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
Alternatively you can use 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
}
});
这篇关于如何将单击侦听器或上下文菜单添加到 Vaadin 的网格列标题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!