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.

ComboBoxCaptionAndIconUpdate.java 3.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. package com.vaadin.tests.components.combobox;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.stream.Collectors;
  5. import java.util.stream.Stream;
  6. import com.vaadin.annotations.Widgetset;
  7. import com.vaadin.server.ClassResource;
  8. import com.vaadin.server.VaadinRequest;
  9. import com.vaadin.tests.components.AbstractTestUI;
  10. import com.vaadin.ui.Button;
  11. import com.vaadin.ui.Button.ClickListener;
  12. import com.vaadin.ui.ComboBox;
  13. @Widgetset("com.vaadin.DefaultWidgetSet")
  14. public class ComboBoxCaptionAndIconUpdate extends AbstractTestUI {
  15. public static class Commit {
  16. private final long id;
  17. private String message;
  18. private ClassResource icon;
  19. Commit(long id, String message, ClassResource icon) {
  20. this.id = id;
  21. this.message = message;
  22. this.icon = icon;
  23. }
  24. public long getId() {
  25. return id;
  26. }
  27. public String getMessage() {
  28. return message;
  29. }
  30. public void setMessage(String message) {
  31. this.message = message;
  32. }
  33. public ClassResource getIcon() {
  34. return icon;
  35. }
  36. public void setIcon(ClassResource icon) {
  37. this.icon = icon;
  38. }
  39. }
  40. List<Commit> backend = new ArrayList<>();
  41. private final ClassResource M_RESOURCE = new ClassResource(
  42. "/com/vaadin/tests/m.gif");
  43. private final ClassResource FI_RESOURCE = new ClassResource(
  44. "/com/vaadin/tests/integration/fi.gif");
  45. @Override
  46. protected void setup(VaadinRequest request) {
  47. ComboBox<Commit> comboBox = new ComboBox<Commit>();
  48. backend = Stream.of(1, 2)
  49. .map(id -> new Commit(id, "Commit ID " + id, M_RESOURCE))
  50. .collect(Collectors.toList());
  51. comboBox.setItems(backend);
  52. comboBox.setValue(backend.get(0));
  53. comboBox.setItemIconGenerator(i -> FI_RESOURCE);
  54. comboBox.setItemCaptionGenerator(i -> "Commit " + i.getId());
  55. comboBox.setWidth("300px");
  56. addComponent(comboBox);
  57. addComponent(createButton("Set Icon Generator", "icon",
  58. e -> comboBox.setItemIconGenerator(Commit::getIcon)));
  59. addComponent(createButton("Set Caption Generator", "caption",
  60. e -> comboBox.setItemCaptionGenerator(Commit::getMessage)));
  61. addComponent(createButton("Edit Message", "editMsg", e -> {
  62. Commit item = backend.get(0);
  63. item.setMessage("Edited message");
  64. comboBox.getDataProvider().refreshItem(item);
  65. }));
  66. addComponent(createButton("Edit Icon", "editIcon", e -> {
  67. Commit item = backend.get(0);
  68. item.setIcon(FI_RESOURCE);
  69. comboBox.getDataProvider().refreshItem(item);
  70. }));
  71. addComponent(createButton("Edit Message and Icon", "editAll", e -> {
  72. Commit item = backend.get(0);
  73. item.setMessage("Edited message and icon");
  74. item.setIcon(FI_RESOURCE);
  75. comboBox.getDataProvider().refreshItem(item);
  76. }));
  77. }
  78. private Button createButton(String caption, String id,
  79. ClickListener listener) {
  80. Button button = new Button(caption, listener);
  81. button.setId(id);
  82. return button;
  83. }
  84. }