| Дмитрий Волков ( @ 2007-04-05 15:13:00 |
| Current music: | Cliff Richard - Miss You Night |
| Entry tags: | howto, java, swing, Записки новичга |
{java, swing} Записки новичга: календарик
В качестве календарика в нашем проекте используется jCalendar.
Компонент нареканий не вызывает, все хорошо в стандартной комплектации, кроме одного:
Невозможно установить дату программным путём, при создании компонента текущей устанавливается сегодняшняя дата (как минимум, это верно для используемой у нас версии 0.1, самой последней на данный момент).
Понятно, что это не в какие ворота :)
Поразглядывал исходники, никакой too much magic не обнаружил, добавил в итоге к публичному интерфейсу jCalendar метод void setDate(Date newDate).
Исходники прилагаются (никакого rocket science, просто выкладываю для сокращения времени другим).
# diff пакета com.greef.ui.calendar
diff jcalendar.old/CalendarTableModel.java jcalendar.new/CalendarTableModel.java
126c126,136
<
—-
>
> /**
> * Sets the month and year for this calendar.
> * @param month the month for this calendar
> * @param year the year for this calendar
> *
> * added by dvolkov
> */
> public void setDate(Date newDate) {
> calendar.setTime(newDate);
> }
diff jcalendar.old/JCalendar.java jcalendar.new/JCalendar.java
535a536,561
> /**
> * Sets this month/year calendar to the month/year of the selecteddate.
> *
> * added by dvolkov
> */
> public void setDate(Date newDate) {
> int oldMonthValue = getMonth();
> int oldYearValue = getYear();
> calendarTable.getCalendarModel().setDate( newDate );
> updateControlsFromTable();
> // fire property change
> int newMonthValue = getMonth();
> if (oldMonthValue != newMonthValue) {
> firePropertyChange(MONTH_PROPERTY, oldMonthValue, newMonthValue);
> }
> int newYearValue = getYear();
> if (oldYearValue != newYearValue) {
> firePropertyChange(YEAR_PROPERTY, oldYearValue, newYearValue);
> }
> // clear selection when changing the month in view
> if (oldMonthValue != newMonthValue && oldYearValue != newYearValue) {
> calendarTable.getSelectionModel().clearSelection();
> }
> calendarTable.setSelectedDate(newDate);
> }
>
diff jcalendar.old/JCalendarTable.java jcalendar.new/JCalendarTable.java
104a105,122
>
> public boolean setSelectedDate(Date newDate) {
> int rows = getRowCount();
> int cols = getColumnCount();
> for (int i = 0; i < rows; i++) {
> for (int j = 0; j < cols; j++) {
> if ( calendarModel.getCalendarAt(i, j).getTime().equals(newDate) ) {
> changeSelection(i, j, false, false);
> return true;
> }
> }
> }
> return false;
> }