You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

GridHeaderFooterComponents.java 4.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. package com.vaadin.tests.components.grid;
  2. import java.util.stream.IntStream;
  3. import com.vaadin.server.VaadinRequest;
  4. import com.vaadin.tests.components.AbstractTestUIWithLog;
  5. import com.vaadin.tests.data.bean.Person;
  6. import com.vaadin.ui.Button;
  7. import com.vaadin.ui.Component;
  8. import com.vaadin.ui.Grid;
  9. import com.vaadin.ui.Grid.Column;
  10. import com.vaadin.ui.TextField;
  11. import com.vaadin.ui.components.grid.FooterCell;
  12. import com.vaadin.ui.components.grid.FooterRow;
  13. import com.vaadin.ui.components.grid.HeaderCell;
  14. import com.vaadin.ui.components.grid.HeaderRow;
  15. import com.vaadin.ui.renderers.NumberRenderer;
  16. public class GridHeaderFooterComponents extends AbstractTestUIWithLog {
  17. @Override
  18. protected void setup(VaadinRequest request) {
  19. final Grid<Person> grid = new Grid<>();
  20. grid.setWidth("800px");
  21. grid.addColumn(Person::getFirstName).setId("action");
  22. grid.addColumn(Person::getLastName).setId("string");
  23. grid.addColumn(Person::getAge, new NumberRenderer()).setId("int");
  24. grid.addColumn(Person::getSalaryDouble, new NumberRenderer())
  25. .setId("double");
  26. grid.setItems(IntStream.range(0, 5).mapToObj(this::createPerson));
  27. final HeaderRow defaultRow = grid.getDefaultHeaderRow();
  28. final HeaderRow toggleVisibilityRow = grid.appendHeaderRow();
  29. final HeaderRow filterRow = grid.appendHeaderRow();
  30. final FooterRow footerRow = grid.appendFooterRow();
  31. final FooterRow toggleVisibilityFooterRow = grid.addFooterRowAt(0);
  32. final FooterRow filterFooterRow = grid.addFooterRowAt(0);
  33. // Set up a filter for all columns
  34. for (Column<Person, ?> column : grid.getColumns()) {
  35. final HeaderCell headerCell = filterRow.getCell(column);
  36. final FooterCell footerCell = filterFooterRow.getCell(column);
  37. headerCell.setComponent(createTextField(column.getId()));
  38. footerCell.setComponent(createTextField(column.getId()));
  39. toggleVisibilityRow.getCell(column.getId())
  40. .setComponent(new Button("Toggle field", event -> {
  41. Component c = headerCell.getComponent();
  42. c.setVisible(!c.isVisible());
  43. }));
  44. toggleVisibilityFooterRow.getCell(column.getId())
  45. .setComponent(new Button("Toggle field", event -> {
  46. Component c = footerCell.getComponent();
  47. c.setVisible(!c.isVisible());
  48. }));
  49. }
  50. addComponent(grid);
  51. addRemoveHeaderRow(grid, defaultRow);
  52. addRemoveHeaderRow(grid, filterRow);
  53. addRemoveHeaderRow(grid, toggleVisibilityRow);
  54. addRemoveFooterRow(grid, footerRow);
  55. addRemoveFooterRow(grid, filterFooterRow);
  56. addRemoveFooterRow(grid, toggleVisibilityFooterRow);
  57. // Hide first field initially
  58. filterRow.getCell("string").getComponent().setVisible(false);
  59. filterFooterRow.getCell("string").getComponent().setVisible(false);
  60. }
  61. private void addRemoveHeaderRow(final Grid<Person> grid,
  62. final HeaderRow row) {
  63. row.getCell("action").setComponent(
  64. new Button("Remove row", event -> grid.removeHeaderRow(row)));
  65. }
  66. private void addRemoveFooterRow(final Grid<Person> grid,
  67. final FooterRow row) {
  68. row.getCell("action").setComponent(
  69. new Button("Remove row", event -> grid.removeFooterRow(row)));
  70. }
  71. private Person createPerson(int i) {
  72. Person person = new Person();
  73. person.setFirstName("");
  74. person.setLastName("Hello world");
  75. person.setAge(13);
  76. person.setSalaryDouble(5.2d);
  77. return person;
  78. }
  79. private TextField createTextField(final Object pid) {
  80. TextField filterField = new TextField();
  81. filterField.setWidth("8em");
  82. filterField.setValue("Filter: " + pid);
  83. filterField.addValueChangeListener(
  84. listener -> log("value change for field in " + pid + " to "
  85. + listener.getValue()));
  86. return filterField;
  87. }
  88. }