package com.vaadin.tests.components.grid; import java.util.ArrayList; import java.util.List; import com.vaadin.data.ValueProvider; import com.vaadin.server.VaadinRequest; import com.vaadin.tests.components.AbstractTestUI; import com.vaadin.ui.Button; import com.vaadin.ui.Grid; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Label; import com.vaadin.ui.TextField; public class GridScrollTo extends AbstractTestUI { @Override protected void setup(VaadinRequest request) { List<String> data = new ArrayList<>(); for (int i = 0; i < 200; i++) { data.add("Name " + i); } Grid<String> grid = new Grid<>(); grid.setItems(data); grid.setSelectionMode(Grid.SelectionMode.NONE); grid.addColumn(ValueProvider.identity()).setId("Name") .setCaption("Name"); grid.setDetailsGenerator(item -> { final HorizontalLayout detailsLayout = new HorizontalLayout(); detailsLayout.setWidth(100, Unit.PERCENTAGE); detailsLayout.setHeightUndefined(); final Label lbl1 = new Label(item + " details"); detailsLayout.addComponent(lbl1); return detailsLayout; }); grid.addItemClickListener(event -> { final String itemId = event.getItem(); grid.setDetailsVisible(itemId, !grid.isDetailsVisible(itemId)); }); Button scrollToTop = new Button("Scroll to top", clickEvent -> grid.scrollToStart()); scrollToTop.setId("top"); Button scrollToEnd = new Button("Scroll to end", clickEvent -> grid.scrollToEnd()); scrollToEnd.setId("end"); TextField rowField = new TextField("Target row"); rowField.setId("row-field"); Button scrollToRow = new Button("Scroll to row", clickEvent -> grid .scrollTo(Integer.parseInt(rowField.getValue()))); scrollToRow.setId("row"); addComponent(grid); addComponent(new HorizontalLayout(scrollToTop, scrollToEnd, rowField, scrollToRow)); } }