/**
   * JCalendar constructor with month spinner parameter.
   *
   * @param date the date
   * @param locale the locale
   * @param monthSpinner false, if no month spinner should be used
   * @param weekOfYearVisible true, if weeks of year shall be visible
   */
  public JCalendar(Date date, Locale locale, boolean monthSpinner, boolean weekOfYearVisible) {
    // needed for setFont() etc.
    dayChooser = null;
    monthChooser = null;
    yearChooser = null;
    this.weekOfYearVisible = weekOfYearVisible;

    this.locale = locale;

    if (locale == null) {
      this.locale = Locale.getDefault();
    }

    Locale.setDefault(new Locale("ru", "RU"));
    calendar = Calendar.getInstance();

    setLayout(new BorderLayout());

    monthYearPanel = new JPanel();
    monthYearPanel.setLayout(new BorderLayout());

    monthChooser = new JMonthChooser(monthSpinner);
    yearChooser = new JYearChooser();
    monthChooser.setYearChooser(yearChooser);
    monthYearPanel.add(monthChooser, BorderLayout.WEST);
    monthYearPanel.add(yearChooser, BorderLayout.CENTER);
    monthYearPanel.setBorder(BorderFactory.createEmptyBorder());

    dayChooser = new JDayChooser(weekOfYearVisible);
    dayChooser.addPropertyChangeListener(this);
    monthChooser.setDayChooser(dayChooser);
    monthChooser.addPropertyChangeListener(this);
    yearChooser.setDayChooser(dayChooser);
    yearChooser.addPropertyChangeListener(this);
    add(monthYearPanel, BorderLayout.NORTH);
    add(dayChooser, BorderLayout.CENTER);

    // Set the initialized flag before setting the calendar. This will
    // cause the other components to be updated properly.
    if (date != null) {
      calendar.setTime(date);
    }

    initialized = true;
    setCalendar(calendar);
  }