Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

GridComponents.java 3.1KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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.shared.ui.ValueChangeMode;
  9. import com.vaadin.tests.components.AbstractTestUIWithLog;
  10. import com.vaadin.ui.Button;
  11. import com.vaadin.ui.Grid;
  12. import com.vaadin.ui.Label;
  13. import com.vaadin.ui.Notification;
  14. import com.vaadin.ui.Notification.Type;
  15. import com.vaadin.ui.TextField;
  16. import com.vaadin.ui.renderers.ComponentRenderer;
  17. @Widgetset("com.vaadin.DefaultWidgetSet")
  18. public class GridComponents extends AbstractTestUIWithLog {
  19. private Map<String, TextField> textFields = new HashMap<>();
  20. private int counter = 0;
  21. @Override
  22. protected void setup(VaadinRequest request) {
  23. Grid<String> grid = new Grid<>();
  24. grid.addComponentColumn(Label::new).setId("label")
  25. .setCaption("Column 0").setHandleWidgetEvents(true);
  26. grid.getDefaultHeaderRow().getCell("label")
  27. .setComponent(new Label("Label"));
  28. grid.addComponentColumn(string -> {
  29. if (textFields.containsKey(string)) {
  30. log("Reusing old text field for: " + string);
  31. return textFields.get(string);
  32. }
  33. TextField textField = new TextField();
  34. textField.setValue(string);
  35. textField.setWidth("100%");
  36. // Make sure all changes are sent immediately
  37. textField.setValueChangeMode(ValueChangeMode.EAGER);
  38. textField.addValueChangeListener(event -> {
  39. // Value of text field edited by user, store
  40. textFields.put(string, textField);
  41. });
  42. return textField;
  43. }).setId("textField").setCaption("TextField");
  44. grid.addColumn(string -> {
  45. if (string.contains("30")) {
  46. return null;
  47. }
  48. Button button = new Button("Click Me!",
  49. event -> Notification.show(
  50. "Clicked button on row for: " + string,
  51. Type.WARNING_MESSAGE));
  52. button.setId(string.replace(' ', '_').toLowerCase(Locale.ROOT));
  53. return button;
  54. }, new ComponentRenderer()).setId("button").setCaption("Button");
  55. // make sure the buttons and focus outlines fit completely in a row
  56. grid.setRowHeight(40);
  57. grid.getDefaultHeaderRow().join("textField", "button")
  58. .setText("Other Components");
  59. addComponent(grid);
  60. grid.setSizeFull();
  61. Button resetData = new Button("Reset data", event -> {
  62. grid.setItems(IntStream.range(0, 1000).boxed()
  63. .map(i -> "Row " + (i + (counter * 1000))));
  64. textFields.clear();
  65. ++counter;
  66. });
  67. resetData.click();
  68. addComponent(resetData);
  69. grid.appendHeaderRow().join("label", "textField", "button").setComponent(new TextField());
  70. grid.appendFooterRow().join("label", "textField", "button").setComponent(new TextField());
  71. }
  72. }