001 /* 002 * Copyright 2005 Sun Microsystems, Inc., 4150 Network Circle, 003 * Santa Clara, California 95054, U.S.A. All rights reserved. 004 * 005 * This library is free software; you can redistribute it and/or 006 * modify it under the terms of the GNU Lesser General Public 007 * License as published by the Free Software Foundation; either 008 * version 2.1 of the License, or (at your option) any later version. 009 * 010 * This library is distributed in the hope that it will be useful, 011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 013 * Lesser General Public License for more details. 014 * 015 * You should have received a copy of the GNU Lesser General Public 016 * License along with this library; if not, write to the Free Software 017 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 018 */ 019 package org.jdesktop.swingx; 020 021 import javax.swing.JFormattedTextField; 022 import javax.swing.UIManager; 023 import java.text.DateFormat; 024 import java.text.SimpleDateFormat; 025 import java.text.ParseException; 026 027 /** 028 * Default formatter for the JXDatePicker component. This factory 029 * creates and returns a formatter that can handle a variety of date 030 * formats. 031 * 032 * @author Joshua Outwater 033 */ 034 public class JXDatePickerFormatter extends 035 JFormattedTextField.AbstractFormatter { 036 private DateFormat _formats[] = null; 037 038 public JXDatePickerFormatter() { 039 _formats = new DateFormat[3]; 040 _formats[0] = new SimpleDateFormat(UIManager.getString("JXDatePicker.longFormat")); 041 _formats[1] = new SimpleDateFormat(UIManager.getString("JXDatePicker.mediumFormat")); 042 _formats[2] = new SimpleDateFormat(UIManager.getString("JXDatePicker.shortFormat")); 043 } 044 045 public JXDatePickerFormatter(DateFormat formats[]) { 046 _formats = formats; 047 } 048 049 public DateFormat[] getFormats() { 050 return _formats; 051 } 052 053 /** 054 * {@inheritDoc} 055 */ 056 public Object stringToValue(String text) throws ParseException { 057 Object result = null; 058 ParseException pex = null; 059 060 if (text == null || text.trim().length() == 0) { 061 return null; 062 } 063 064 // If the current formatter did not work loop through the other 065 // formatters and see if any of them can parse the string passed 066 // in. 067 for (DateFormat _format : _formats) { 068 try { 069 result = (_format).parse(text); 070 pex = null; 071 break; 072 } catch (ParseException ex) { 073 pex = ex; 074 } 075 } 076 077 if (pex != null) { 078 throw pex; 079 } 080 081 return result; 082 } 083 084 /** 085 * {@inheritDoc} 086 */ 087 public String valueToString(Object value) throws ParseException { 088 if (value != null) { 089 return _formats[0].format(value); 090 } 091 return null; 092 } 093 }