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.

GridComponentsVisibility.java 2.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package com.vaadin.tests.components.grid;
  2. import java.util.HashMap;
  3. import java.util.Locale;
  4. import java.util.Map;
  5. import java.util.stream.IntStream;
  6. import com.vaadin.annotations.Widgetset;
  7. import com.vaadin.server.VaadinRequest;
  8. import com.vaadin.tests.components.AbstractTestUIWithLog;
  9. import com.vaadin.ui.Button;
  10. import com.vaadin.ui.Grid;
  11. import com.vaadin.ui.Label;
  12. import com.vaadin.ui.TextField;
  13. import com.vaadin.ui.renderers.ComponentRenderer;
  14. @Widgetset("com.vaadin.DefaultWidgetSet")
  15. public class GridComponentsVisibility extends AbstractTestUIWithLog {
  16. private Map<String, TextField> textFields = new HashMap<>();
  17. private int counter = 0;
  18. @Override
  19. protected void setup(VaadinRequest request) {
  20. Grid<String> grid = new Grid<>();
  21. grid.addColumn(string -> new Label(string), new ComponentRenderer())
  22. .setId("label").setCaption("Column 0");
  23. grid.getDefaultHeaderRow().getCell("label")
  24. .setComponent(new Label("Label"));
  25. grid.addComponentColumn(string -> {
  26. if (textFields.containsKey(string)) {
  27. log("Reusing old text field for: " + string);
  28. return textFields.get(string);
  29. }
  30. TextField textField = new TextField();
  31. textField.setValue(string);
  32. textField.setWidth("100%");
  33. textFields.put(string, textField);
  34. return textField;
  35. }).setId("textField").setCaption("TextField");
  36. grid.addColumn(string -> {
  37. Button button = new Button("Click Me!",
  38. event -> toggleFieldVisibility(string));
  39. button.setId(string.replace(' ', '_').toLowerCase(Locale.ROOT));
  40. return button;
  41. }, new ComponentRenderer()).setId("button").setCaption("Button");
  42. // make sure the buttons and focus outlines fit completely in a row
  43. grid.setRowHeight(40);
  44. grid.getDefaultHeaderRow().join("textField", "button")
  45. .setText("Other Components");
  46. addComponent(grid);
  47. grid.setSizeFull();
  48. grid.setItems(IntStream.range(0, 5).boxed()
  49. .map(i -> "Row " + (i + (counter * 1000))));
  50. }
  51. private void toggleFieldVisibility(String string) {
  52. textFields.get(string).setVisible(!textFields.get(string).isVisible());
  53. }
  54. }