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.

DateTimeFieldResolutionChange.java 3.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. package com.vaadin.tests.components.datefield;
  2. import java.time.LocalDateTime;
  3. import java.time.format.DateTimeFormatter;
  4. import java.util.Locale;
  5. import com.vaadin.data.Binder;
  6. import com.vaadin.server.VaadinRequest;
  7. import com.vaadin.shared.ui.datefield.DateTimeResolution;
  8. import com.vaadin.tests.components.AbstractTestUIWithLog;
  9. import com.vaadin.ui.Button;
  10. import com.vaadin.ui.DateTimeField;
  11. import com.vaadin.ui.HorizontalLayout;
  12. public class DateTimeFieldResolutionChange extends AbstractTestUIWithLog {
  13. protected DateTimeFormatter DATE_FORMATTER = DateTimeFormatter
  14. .ofPattern("yyyy-MM-dd HH:mm:ss", Locale.ROOT);
  15. @Override
  16. protected void setup(VaadinRequest request) {
  17. Binder<Pojo> binder = new Binder<>(Pojo.class);
  18. HorizontalLayout horizontalLayout = new HorizontalLayout();
  19. final DateTimeField monthField = new DateTimeField() {
  20. @Override
  21. public void setValue(LocalDateTime value) {
  22. if (value != null) {
  23. log("MonthField set value " + DATE_FORMATTER.format(value));
  24. }
  25. super.setValue(value);
  26. }
  27. };
  28. monthField.setResolution(DateTimeResolution.MONTH);
  29. monthField.setId("MonthField");
  30. monthField.addValueChangeListener(
  31. event -> log("MonthField value change event: "
  32. + DATE_FORMATTER.format(event.getValue())));
  33. binder.bind(monthField, "value1");
  34. final DateTimeField dayField = new DateTimeField() {
  35. @Override
  36. public void setValue(LocalDateTime value) {
  37. if (value != null) {
  38. log("DayField set value " + DATE_FORMATTER.format(value));
  39. }
  40. super.setValue(value);
  41. }
  42. };
  43. dayField.setResolution(DateTimeResolution.DAY);
  44. dayField.setId("DayField");
  45. dayField.addValueChangeListener(
  46. event -> log("DayField value change event: "
  47. + DATE_FORMATTER.format(event.getValue())));
  48. binder.bind(dayField, "value2");
  49. Pojo pojo = new Pojo();
  50. binder.setBean(pojo);
  51. Button monthButton = new Button("month", e -> {
  52. monthField.setResolution(DateTimeResolution.MONTH);
  53. dayField.setResolution(DateTimeResolution.MONTH);
  54. });
  55. Button dayButton = new Button("day", e -> {
  56. monthField.setResolution(DateTimeResolution.DAY);
  57. dayField.setResolution(DateTimeResolution.DAY);
  58. });
  59. Button logButton = new Button("log", e -> {
  60. log("MonthField current value: "
  61. + DATE_FORMATTER.format(pojo.getValue1()));
  62. log("DayField current value: "
  63. + DATE_FORMATTER.format(pojo.getValue2()));
  64. });
  65. Button setButton = new Button("set", e -> {
  66. LocalDateTime newDate = LocalDateTime.of(2021, 2, 14, 16, 17);
  67. pojo.setValue1(newDate);
  68. pojo.setValue2(newDate);
  69. binder.setBean(pojo);
  70. });
  71. horizontalLayout.addComponents(monthField, dayField, monthButton,
  72. dayButton, logButton, setButton);
  73. addComponent(horizontalLayout);
  74. }
  75. public class Pojo {
  76. private LocalDateTime value1, value2 = null;
  77. public LocalDateTime getValue1() {
  78. return value1;
  79. }
  80. public void setValue1(LocalDateTime value1) {
  81. this.value1 = value1;
  82. }
  83. public LocalDateTime getValue2() {
  84. return value2;
  85. }
  86. public void setValue2(LocalDateTime value2) {
  87. this.value2 = value2;
  88. }
  89. }
  90. @Override
  91. protected String getTestDescription() {
  92. return "Date field value should immediately update to match resolution.";
  93. }
  94. }