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