您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

TestForContainerFilterable.java 3.0KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package com.vaadin.tests;
  2. import com.vaadin.ui.Button;
  3. import com.vaadin.ui.CustomComponent;
  4. import com.vaadin.ui.HorizontalLayout;
  5. import com.vaadin.ui.Label;
  6. import com.vaadin.ui.Panel;
  7. import com.vaadin.ui.VerticalLayout;
  8. import com.vaadin.v7.data.util.IndexedContainer;
  9. import com.vaadin.v7.ui.Table;
  10. import com.vaadin.v7.ui.TextField;
  11. public class TestForContainerFilterable extends CustomComponent {
  12. VerticalLayout lo = new VerticalLayout();
  13. IndexedContainer ic = new IndexedContainer();
  14. Table t = new Table();
  15. private static String parts[] = { "Neo", "Sa", "rem", "the", "adi", "za",
  16. "tre", "day", "Ca", "re", "cen", "ter", "mi", "nal" };
  17. TextField fooFilter = new TextField("foo-filter");
  18. TextField barFilter = new TextField("bar-filter");
  19. Button filterButton = new Button("Filter");
  20. Label count = new Label();
  21. public TestForContainerFilterable() {
  22. setCompositionRoot(lo);
  23. // Init datasource
  24. ic.addContainerProperty("foo", String.class, "");
  25. ic.addContainerProperty("bar", String.class, "");
  26. for (int i = 0; i < 1000; i++) {
  27. final Object id = ic.addItem();
  28. ic.getContainerProperty(id, "foo").setValue(randomWord());
  29. ic.getContainerProperty(id, "bar").setValue(randomWord());
  30. }
  31. // Init filtering view
  32. final HorizontalLayout filterLayout = new HorizontalLayout();
  33. final Panel filterPanel = new Panel("Filter", filterLayout);
  34. filterPanel.setWidth(100, Panel.UNITS_PERCENTAGE);
  35. lo.addComponent(filterPanel);
  36. filterLayout.addComponent(fooFilter);
  37. filterLayout.addComponent(barFilter);
  38. filterLayout.addComponent(filterButton);
  39. fooFilter.setDescription(
  40. "Filters foo column in case-sensitive contains manner.");
  41. barFilter.setDescription(
  42. "Filters bar column in case-insensitive prefix manner.");
  43. filterLayout.addComponent(count);
  44. // Table
  45. lo.addComponent(t);
  46. t.setPageLength(12);
  47. t.setWidth(100, Table.UNITS_PERCENTAGE);
  48. t.setContainerDataSource(ic);
  49. // Handler
  50. filterButton.addClickListener(event -> {
  51. ic.removeAllContainerFilters();
  52. if (!fooFilter.getValue().isEmpty()) {
  53. ic.addContainerFilter("foo", fooFilter.getValue(), false,
  54. false);
  55. }
  56. if (!barFilter.getValue().isEmpty()) {
  57. ic.addContainerFilter("bar", barFilter.getValue(), true, true);
  58. }
  59. count.setValue("Rows in table: " + ic.size());
  60. });
  61. // Resetbutton
  62. lo.addComponent(new Button("Rebind table datasource",
  63. event -> t.setContainerDataSource(ic)));
  64. }
  65. private String randomWord() {
  66. int len = (int) (Math.random() * 4);
  67. final StringBuilder buf = new StringBuilder();
  68. while (len-- >= 0) {
  69. buf.append(parts[(int) (Math.random() * parts.length)]);
  70. }
  71. return buf.toString();
  72. }
  73. }