Дмитрий Волков ([info]_radiant_) wrote,
@ 2007-04-05 15:13:00
Previous Entry  Add to memories!  Tell a Friend!  Next Entry
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;
>     }



(Post a new comment)


[info]brekhercmb
2007-04-06 06:05 pm UTC (link)
как так... я врожде ставил.. gregorianCalendar() - конструктор, метод setDate вроде

(Reply to this)(Thread)


[info]_radiant_
2007-04-09 09:00 am UTC (link)
Ты уверен, что пользовал именно этот календарег?
Версия вроде действительно последняя и у меня в её сырцах ничего подобного нет. [ единственное упоминание в закрытой от внешней среды CalendarTableModel, да ещё до кучи приватной переменно :) ]

Код в студию?..

(Reply to this)(Parent)



Create an Account
Forgot your login?
Login w/ OpenID
English • Español • Deutsch • Русский…