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.

ComboBoxAddNewItemAndResetProviderAtSameRound.java 3.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. package com.vaadin.tests.components.combobox;
  2. import java.util.ArrayList;
  3. import java.util.Collections;
  4. import java.util.List;
  5. import java.util.Optional;
  6. import com.vaadin.server.VaadinRequest;
  7. import com.vaadin.tests.components.AbstractTestUIWithLog;
  8. import com.vaadin.ui.Button;
  9. import com.vaadin.ui.CheckBox;
  10. import com.vaadin.ui.ComboBox;
  11. import com.vaadin.ui.HorizontalLayout;
  12. import com.vaadin.ui.Label;
  13. import com.vaadin.ui.Notification;
  14. public class ComboBoxAddNewItemAndResetProviderAtSameRound
  15. extends AbstractTestUIWithLog {
  16. ComboBox<String> comboBox;
  17. List<String> items = new ArrayList<>();
  18. Label resetLabel = new Label("Reset Label");
  19. Label valueLabel = new Label("Value Label");
  20. CheckBox delay = new CheckBox("Slow adding process", false);
  21. @Override
  22. protected void setup(VaadinRequest request) {
  23. initItems();
  24. comboBox = new ComboBox(null, items);
  25. comboBox.setTextInputAllowed(true);
  26. comboBox.setEmptySelectionAllowed(true);
  27. comboBox.addValueChangeListener(event -> {
  28. valueLabel.setValue(comboBox.getValue());
  29. log("ComboBox value : " + comboBox.getValue());
  30. });
  31. configureNewItemHandling();
  32. Button checkButton = new Button("Check ComboBox value", e -> {
  33. Notification.show("selected: " + comboBox.getValue());
  34. });
  35. Button resetButton = new Button("Reset options", e -> {
  36. comboBox.setValue(null);
  37. initItems();
  38. comboBox.getDataProvider().refreshAll();
  39. resetLabel.setValue("Reset");
  40. valueLabel.setValue("Value is reset");
  41. log("DataProvider has been reset");
  42. });
  43. resetLabel.setId("reset-label");
  44. valueLabel.setId("value-label");
  45. delay.setId("delay");
  46. resetButton.setId("reset");
  47. Button button = new Button("Button for clicking only");
  48. button.setId("button-for-click");
  49. HorizontalLayout hl = new HorizontalLayout(checkButton, button);
  50. addComponents(comboBox, resetLabel, valueLabel, hl, resetButton, delay);
  51. }
  52. private void configureNewItemHandling() {
  53. comboBox.setNewItemProvider(text -> {
  54. if (delay.getValue()) {
  55. try {
  56. Thread.sleep(2000);
  57. } catch (InterruptedException e1) {
  58. e1.printStackTrace();
  59. }
  60. }
  61. items.add(text);
  62. Collections.sort(items);
  63. comboBox.getDataProvider().refreshAll();
  64. log("New item has been added");
  65. return Optional.of(text);
  66. });
  67. }
  68. private void initItems() {
  69. items.clear();
  70. StringBuilder builder = new StringBuilder();
  71. for (char c = 'a'; c <= 'z'; c++) {
  72. for (int i = 0; i < 100; i++) {
  73. builder.setLength(0);
  74. items.add(builder.append(c).append(i).toString());
  75. }
  76. }
  77. }
  78. @Override
  79. protected Integer getTicketNumber() {
  80. return 11343;
  81. }
  82. }