001    package org.springframework.richclient.form.binding.swing.date;
002    
003    
004    import java.beans.PropertyChangeEvent;
005    import java.beans.PropertyChangeListener;
006    import java.util.Date;
007    
008    import javax.swing.JComponent;
009    
010    import org.springframework.binding.form.FormModel;
011    
012    import com.toedter.calendar.JDateChooser;
013    
014    /**
015     * Binds a <cod>Date</code> to a JCalendar <code>JDateChooser</code>
016     * 
017     * @author Peter De Bruycker
018     */
019    public class JCalendarDateFieldBinding extends AbstractDateFieldBinding {
020    
021            private JDateChooser dateChooser;
022    
023            public JCalendarDateFieldBinding(JDateChooser dateChooser, FormModel formModel, String formPropertyPath) {
024                    super(formModel, formPropertyPath);
025                    this.dateChooser = dateChooser;
026            }
027    
028            protected void valueModelChanged(Object newValue) {
029                    dateChooser.setDate((Date) newValue);
030            }
031    
032            protected JComponent doBindControl() {
033                    if (getDateFormat() != null) {
034                            dateChooser.setDateFormatString(getDateFormat());
035                    }
036    
037                    dateChooser.setDate((Date) getValue());
038    
039                    dateChooser.addPropertyChangeListener("date", new PropertyChangeListener() {
040                            public void propertyChange(PropertyChangeEvent evt) {
041                                    controlValueChanged(dateChooser.getDate());
042                            }
043                    });
044    
045                    return dateChooser;
046            }
047    
048            protected void readOnlyChanged() {
049                    dateChooser.setEnabled(isEnabled() && !isReadOnly());
050            }
051    
052            protected void enabledChanged() {
053                    dateChooser.setEnabled(isEnabled() && !isReadOnly());
054            }
055    
056    }