protected void installComponents() {
    field = new JFormattedTextField(createFormatterFactory());
    field.setValue(peer.getDate());
    field.setFocusLostBehavior(peer.getFocusLostBehavior());
    field.setEditable(peer.isFieldEditable());
    field.setToolTipText(peer.getToolTipText());
    // button
    button = new JButton();
    button.setFocusable(false);
    button.setMargin(new Insets(0, 0, 0, 0));
    button.setToolTipText(peer.getToolTipText());

    setSimpeLook(false);
    // calendar
    calendarPane = new CalendarPane(peer.getStyle());
    calendarPane.setShowTodayButton(peer.isShowTodayButton());
    calendarPane.setFocusLostBehavior(JFormattedTextField.REVERT);
    calendarPane.setFocusCycleRoot(true);
    calendarPane.setBorder(BorderFactory.createEmptyBorder(1, 3, 0, 3));
    calendarPane.setStripTime(false);
    calendarPane.setLocale(peer.getLocale());
    calendarPane.setZone(peer.getZone());
    calendarPane.setFocusable(peer.isDropdownFocusable());
    calendarPane.setColorOverrideMap(peer.getColorOverrideMap());
    // popup
    popup = new JPopupMenu();
    popup.setLayout(new BorderLayout());
    popup.add(calendarPane, BorderLayout.CENTER);
    popup.setLightWeightPopupEnabled(true);
    // add
    peer.setLayout(new BorderLayout());

    switch (peer.getPickerStyle()) {
    case DatePicker.PICKER_STYLE_FIELD_AND_BUTTON:
      peer.add(field, BorderLayout.CENTER);
      peer.add(button, BorderLayout.EAST);
      break;
    case DatePicker.PICKER_STYLE_BUTTON:
      peer.add(button, BorderLayout.EAST);
      break;
    }

    peer.revalidate();
    peer.repaint();

    componentListener = new ComponentListener();

    button.addActionListener(componentListener);
    field.addPropertyChangeListener(componentListener);

    calendarPane.addPropertyChangeListener(componentListener);
    calendarPane.addCommitListener(componentListener);
    calendarPane.addActionListener(componentListener);

    peerDateChanged(peer.getDate());
  }
protected void installComponents()