private void fill() {
    /* аналіз календаря
     * String userLang = System.getProperty("user.language");
     * String userCountry = System.getProperty("user.country");
       System.out.println("User Language : " + userLang + "\t"
                        + "userCountry : " + userCountry);
       Locale locale = new Locale(userLang, userCountry);

       GregorianCalendar c1 = new GregorianCalendar(locale); // "uk_UA"
       c1.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), 1); */

    //
    GregorianCalendar c1 = new GregorianCalendar(selectedDate.get(Calendar.YEAR), selectedDate.get(Calendar.MONTH), 1);
    int first = c1.get(Calendar.DAY_OF_WEEK);

    switch (first) {
      case 1 : first = -6; break;
      case 2 : first = -7; break; // показувати тиждень попереднього місяця
      default: first = 2-first;
    }
    c1.set(Calendar.DATE, first);

    int last = selectedDate.getActualMaximum(Calendar.DAY_OF_MONTH);

    // показати місяць, рік
    jlMY.setText(monthname(selectedDate.get(Calendar.MONTH),0) + " " + selectedDate.get(Calendar.YEAR));
    // показати дні місяця
    int m = selectedDate.get(Calendar.MONTH);
    int p = 0;
    posfirst = 0;
    poslast = 0;
    int ds = selectedDate.get(Calendar.DAY_OF_MONTH);
    int rs = 0;
    int cs = 0;
    for (int r = 0; r < 6; r++) {
      for (int c = 0; c < 7; c++) {
        c1.add(Calendar.DATE, 1);
        int d = c1.get(Calendar.DATE);
        if (posfirst == 0 & d == 1) { posfirst = p; }
        if (poslast == 0 & d == last & m == c1.get(Calendar.MONTH)) { poslast = p; }
        p++;
        if (m == c1.get(Calendar.MONTH) & ds == c1.get(Calendar.DAY_OF_MONTH)) {
          rs = r;
          cs = c;
        }
        jtMonth.setValueAt(d, r, c);
      }
    }
    // вибрати клітинку із вибраною (розрахованою) датою
    jtMonth.setRowSelectionInterval(rs, rs);
    jtMonth.setColumnSelectionInterval(cs, cs);
    jtMonth.requestFocus();
    change(rs, cs, jtMonth.getValueAt(jtMonth.getSelectedRow(), jtMonth.getSelectedColumn()));
  }