Как добавить прослушиватель кликов или контекстное меню в заголовок столбца Vaadin Grid

Этот вопрос похож на этот. Но меня интересует Vaadin 14, так как я переношу старые компоненты таблицы в сетки. Больше нет HeaderClickListener. Следовательно, как вы можете реализовать прослушиватель кликов в заголовке Grid.

Я не против добавить контекстное меню с выбором столбца для копирования, но я так понимаю, что нет API для получения данных в столбце?


person Ant Kerf    schedule 09.07.2021    source источник


Ответы (1)


В 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
    }
});
person Tatu Lund    schedule 09.07.2021
comment
А чтобы получить значения в этом столбце, нужно пройтись по дочерним элементам столбца? - person Ant Kerf; 09.07.2021
comment
Если вы имеете в виду фактические значения элементов, они не являются дочерними элементами столбца. Вместо этого вам нужно просмотреть список данных и выбрать свойство выбранного столбца каждого элемента. - person Tatu Lund; 09.07.2021