code: private void zInternalChangeSelectedDateProcedure(
          LocalDate newDate, YearMonth oldYearMonthOrNull) {
          LocalDate oldDate = displayedSelectedDate;
          displayedSelectedDate = newDate;
          for (CalendarListener calendarListener : calendarListeners) {
              CalendarSelectionEvent dateSelectionEvent = new CalendarSelectionEvent(
                  this, newDate, oldDate);
              calendarListener.selectedDateChanged(dateSelectionEvent);
          }
          drawCalendar(displayedYearMonth, oldYearMonthOrNull);
          // Fire a change event for beans binding.
          firePropertyChange("selectedDate", oldDate, newDate);
      }
docs: zInternalChangeSelectedDateProcedure, This should be called whenever we need to change the
  selected date variable. This will store the supplied selected date and redraw the calendar.
  If needed, this will notify all calendar listeners that the selected date has been changed.
  This does not perform any other tasks besides those described here.
  
  By intention, this will fire an event even if the user selects the same value twice. This is
  so that programmers can catch all user interactions of interest to them. Duplicate events can
  be detected by using the function CalendarSelectionEvent.isDuplicate().
  
  Note: Any calendar listeners will be notified of date selection changes before the calendar
  is redrawn, so that the programmer may optionally update any tightly linked code that may
  affect this particular redrawing of the calendar. (For example, a programmer might be change
  a highlight policy based on the currently selected date.)