DateField.java :  » MVC » aratana » com » aratana » ui » fields » Java Open Source

Java Open Source » MVC » aratana 
aratana » com » aratana » ui » fields » DateField.java
package com.aratana.ui.fields;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;
import javax.swing.text.SimpleAttributeSet;

/**
 * Campo para a insero de datas.
 * 
 * @author Dyorgio da Silva Nascimento
 */
@SuppressWarnings("serial")
public class DateField extends BasicField<Date> {

  private static AttributeSet NULL = new SimpleAttributeSet();

  private final SimpleDateFormat format;

  private final int formatLength;

  public DateField() {
    this(true, true, true, false, false);
  }

  public DateField(final boolean day, final boolean year, final boolean extendYear) {
    this(day, year, extendYear, false, false);
  }

  public DateField(final boolean day, final boolean year, final boolean extendYear, final boolean hour, final boolean extendsHour) {
    setHorizontalAlignment(RIGHT);
    final StringBuilder lo_buffer = new StringBuilder("##"), formatBuffer = new StringBuilder("MM");

    if (day) {
      lo_buffer.insert(0, "##/");
      formatBuffer.insert(0, "dd/");
    }

    if (year) {
      if (extendYear) {
        lo_buffer.append("/####");
        formatBuffer.append("/yyyy");
      } else {
        lo_buffer.append("/##");
        formatBuffer.append("/yy");
      }

    }

    if (hour) {
      lo_buffer.append(" ##:##");
      formatBuffer.append(" HH:mm");
      if (extendsHour) {
        lo_buffer.append(":##.###");
        formatBuffer.append(":ss.SSS");
      }
    }
    format = new SimpleDateFormat(formatBuffer.toString());
    formatLength = lo_buffer.length();
    setDocument(new PlainDocument() {

      @Override
      public void insertString(final int offs, final String str, final AttributeSet a) throws BadLocationException {
        if (DateField.this.getText().length() < formatLength) {
          final StringBuilder original = new StringBuilder(DateField.this.getText().replaceAll("[^0-9]", ""));
          original.append(str.replaceAll("[^0-9]", ""));
          super.remove(0, getLength());
          if (original.length() >= 3) {
            original.insert(2, '/');
            if (original.length() > 5) {
              if (a != NULL || original.length() > 5) {
                original.insert(5, '/');
              }
              if (original.length() > 10) {
                original.insert(10, ' ');
                if (original.length() == 11 && a == NULL) {
                  original.deleteCharAt(10);
                }
                if (original.length() > 13) {
                  original.insert(13, ':');
                }
                if (original.length() > 16) {
                  original.insert(16, ':');
                  if (original.length() > 19) {
                    original.insert(19, '.');
                  }
                }
              }
            }
          }
          super.insertString(0, original.toString(), a);
        }
      }

      @Override
      public void remove(final int offs, final int len) throws BadLocationException {
        super.remove(offs, len);
        if (len != getLength()) {
          insertString(0, "", NULL);
        }
      }
    });

    addCaretListener(new CaretListener() {

      boolean update = false;

      @Override
      public void caretUpdate(final CaretEvent e) {
        if (!update && e.getDot() == e.getMark() && !allSelected) {
          update = true;
          allSelected = getSelectionStart() != getSelectionEnd() && getSelectionEnd() == getText().length();
          setCaretPosition(getText().length());
          update = false;
        }
      }
    });
  }

  @Override
  public int getMax() {
    return formatLength;
  }

  @Override
  public Date getStringValue(String trim) throws Exception {
    Date retorno = null;
    if (trim.length() == formatLength) {
      try {
        retorno = format.parse(trim);
      } catch (final ParseException e) {
        e.printStackTrace();
      }
    }
    return retorno;
  }

  @Override
  public String getValueString(Date value) {
    return value == null ? "" : format.format(value);
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.