@Override
    public void propertyChange(PropertyChangeEvent evt) {
      if (evt.getSource() == calendarPane) {
        if (CalendarPane.PROPERTY_NAME_DATE.equals(evt
            .getPropertyName())) {
          showPopup(false);

          Date fieldValue;
          try {
            AbstractFormatter formatter = field.getFormatter();
            fieldValue = (Date) formatter.stringToValue(field
                .getText());

          } catch (ParseException e) {
            fieldValue = (Date) field.getValue();
          }

          if (fieldValue != null || evt.getNewValue() != null) {

            if (peer.isKeepTime() && fieldValue != null
                && evt.getNewValue() != null) {

              Calendar fieldCal = Calendar.getInstance(peer
                  .getZone(), peer.getLocale());
              fieldCal.setTime(fieldValue);

              Calendar valueCal = Calendar.getInstance(peer
                  .getZone(), peer.getLocale());
              valueCal.setTime((Date) evt.getNewValue());

              // era
              fieldCal.set(Calendar.ERA, valueCal
                  .get(Calendar.ERA));
              // year
              fieldCal.set(Calendar.YEAR, valueCal
                  .get(Calendar.YEAR));
              // month
              fieldCal.set(Calendar.MONTH, valueCal
                  .get(Calendar.MONTH));
              // date
              fieldCal.set(Calendar.DAY_OF_MONTH, valueCal
                  .get(Calendar.DAY_OF_MONTH));
              field.setValue(fieldCal.getTime());
            } else
              field.setValue(evt.getNewValue());

          }
        }
      }
      if (evt.getSource() == field) {
        if ("value".equals(evt.getPropertyName())) {
          Date value = (Date) field.getValue();

          try {
            peer.setDate(value);
          } catch (PropertyVetoException e) {
            field.setValue(peer.getDate());
          }
        }
      }

    }
@Override
    public void propertyChange(PropertyChangeEvent evt)