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.

GridDetailsDetach.java 3.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. package com.vaadin.tests.components.grid;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import com.vaadin.server.VaadinRequest;
  5. import com.vaadin.tests.components.AbstractTestUI;
  6. import com.vaadin.ui.Button;
  7. import com.vaadin.ui.Grid;
  8. import com.vaadin.ui.Grid.SelectionMode;
  9. import com.vaadin.ui.Label;
  10. import com.vaadin.ui.VerticalLayout;
  11. import com.vaadin.ui.renderers.NumberRenderer;
  12. public class GridDetailsDetach extends AbstractTestUI {
  13. private Grid currentGrid;
  14. @Override
  15. protected void setup(VaadinRequest request) {
  16. VerticalLayout layout = new VerticalLayout();
  17. layout.setSpacing(false);
  18. layout.setMargin(false);
  19. layout.setSizeFull();
  20. Button button = new Button("Test");
  21. layout.addComponent(button);
  22. layout.setExpandRatio(button, 0f);
  23. currentGrid = generateGrid();
  24. final VerticalLayout gridContainer = new VerticalLayout();
  25. gridContainer.setSpacing(false);
  26. gridContainer.setMargin(false);
  27. gridContainer.addComponent(currentGrid);
  28. button.addClickListener(event -> gridContainer
  29. .replaceComponent(currentGrid, new Label("Foo")));
  30. layout.addComponent(new Button("Reattach Grid", event -> {
  31. gridContainer.removeAllComponents();
  32. gridContainer.addComponent(currentGrid);
  33. }));
  34. layout.addComponent(gridContainer);
  35. layout.setExpandRatio(gridContainer, 1f);
  36. addComponent(layout);
  37. }
  38. private Grid<GridExampleBean> generateGrid() {
  39. List<GridExampleBean> items = new ArrayList<>();
  40. for (int i = 0; i < 1000; i++) {
  41. items.add(new GridExampleBean("Bean " + i, i * i, i / 10d));
  42. }
  43. final Grid<GridExampleBean> grid = new Grid<>();
  44. grid.setItems(items);
  45. grid.addColumn(GridExampleBean::getName);
  46. grid.addColumn(GridExampleBean::getAmount, new NumberRenderer());
  47. grid.addColumn(GridExampleBean::getCount, new NumberRenderer());
  48. grid.setSizeFull();
  49. grid.setSelectionMode(SelectionMode.NONE);
  50. grid.setDetailsGenerator(item -> {
  51. VerticalLayout layout = new VerticalLayout(
  52. new Label("Extra data for " + item.getName()));
  53. layout.setMargin(true);
  54. return layout;
  55. });
  56. grid.addItemClickListener(event -> {
  57. GridExampleBean item = event.getItem();
  58. grid.setDetailsVisible(item, !grid.isDetailsVisible(item));
  59. });
  60. return grid;
  61. }
  62. public class GridExampleBean {
  63. private String name;
  64. private int count;
  65. private double amount;
  66. public GridExampleBean() {
  67. }
  68. public GridExampleBean(String name, int count, double amount) {
  69. this.name = name;
  70. this.count = count;
  71. this.amount = amount;
  72. }
  73. public String getName() {
  74. return name;
  75. }
  76. public int getCount() {
  77. return count;
  78. }
  79. public double getAmount() {
  80. return amount;
  81. }
  82. public void setName(String name) {
  83. this.name = name;
  84. }
  85. public void setCount(int count) {
  86. this.count = count;
  87. }
  88. public void setAmount(double amount) {
  89. this.amount = amount;
  90. }
  91. }
  92. }