Добавление / создание события щелчка для строк в сетке Vaadin с помощью SelectionMode.MULTI? - PullRequest
0 голосов
/ 11 февраля 2020

Я пытаюсь создать небольшое приложение, в котором у меня есть различные местоположения файлов, хранящиеся в сетке Vaadin, сетка в настоящее время показывает только два столбца - ID и File Name, и я хотел бы видеть в качестве уведомления файл Расположение тоже всякий раз, когда я нажимаю на строку.

То есть каждый раз, когда я щелкаю строку в сетке, я хотел бы, чтобы она показывала мне местоположение, используя Notification.show(), например:

rainbows (Пожалуйста, игнорируйте <b></b> s, они не имеют значения.)

Поскольку моя модель выбора сеток MULTI, по умолчанию прослушиватель щелчков не может регистрировать, по какой строке щелкнули, и выбор строки с помощью флажка - это не то, что я хочу иметь данные отображаются. Проще говоря, я хотел бы получить элемент для каждой строки, которую я нажимаю, и отображать местоположение в качестве уведомления.

Пока что я нашел решение для аналогичной проблемы, но оно касается столбцов, и строки в сетках Ваадина довольно сильно отличаются от того, к чему я привык.

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 , и я не совсем понимаю его. Кажется, что строка expression содержит возможный код JavaScript, а остальное переопределяет тип столбца. (я думаю, я действительно не совсем понимаю этот фрагмент)

Есть ли способ сделать что-то похожее на фрагмент выше, кроме строк?

1 Ответ

3 голосов
/ 11 февраля 2020

Вы можете сделать это с помощью ItemClickListener в Grid:

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