package com.revolsys.swing.field; import java.awt.Color; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.Date; import javax.swing.JFormattedTextField; import org.jdesktop.swingx.JXDatePicker; import com.revolsys.datatype.DataType; import com.revolsys.datatype.DataTypes; import com.revolsys.util.Property; public class DateField extends JXDatePicker implements Field, PropertyChangeListener { private static final long serialVersionUID = 1L; private final FieldSupport fieldSupport; public DateField() { this("fieldValue"); } public DateField(final String fieldName) { this(fieldName, null); } public DateField(final String fieldName, final Object fieldValue) { this.fieldSupport = new FieldSupport(this, fieldName, fieldValue, true); Property.addListener(this, "date", this); getUndoManager().addKeyMap(getEditor()); } @Override public DateField clone() { return new DateField(getFieldName(), getFieldValue()); } @Override public void firePropertyChange(final String propertyName, final Object oldValue, final Object newValue) { super.firePropertyChange(propertyName, oldValue, newValue); } @Override public Color getFieldSelectedTextColor() { return getEditor().getSelectedTextColor(); } @Override public FieldSupport getFieldSupport() { return this.fieldSupport; } @Override public void propertyChange(final PropertyChangeEvent evt) { final String propertyName = evt.getPropertyName(); if (propertyName.equals("date")) { final Object date = evt.getNewValue(); setFieldValue(date); } } @Override public void setDate(final Date date) { super.setDate(date); } @Override public void setFieldBackgroundColor(Color color) { if (color == null) { color = Field.DEFAULT_BACKGROUND; } final JFormattedTextField editor = getEditor(); editor.setBackground(color); } @Override public void setFieldForegroundColor(Color color) { if (color == null) { color = Field.DEFAULT_BACKGROUND; } final JFormattedTextField editor = getEditor(); editor.setForeground(color); } @Override public void setFieldSelectedTextColor(Color color) { if (color == null) { color = Field.DEFAULT_SELECTED_FOREGROUND; } final JFormattedTextField editor = getEditor(); editor.setSelectedTextColor(color); } @Override public void setFieldToolTip(final String toolTip) { final JFormattedTextField editor = getEditor(); editor.setToolTipText(toolTip); } @Override public boolean setFieldValue(final Object value) { final Date date = DataTypes.DATE_TIME.toObject(value); if (!DataType.equal(getDate(), date)) { setDate(date); } return this.fieldSupport.setValue(date); } @Override public void setToolTipText(final String text) { final FieldSupport fieldSupport = getFieldSupport(); if (fieldSupport == null || fieldSupport.setOriginalTooltipText(text)) { super.setToolTipText(text); } } @Override public String toString() { return getFieldName() + "=" + getFieldValue(); } @Override public void updateFieldValue() { // TODO setFieldValue(getText()); } }