JXDatePicker usando SimpleDateFormat para formatear dd.MM.yy a dd.MM.yyyy con el siglo actual

Como ya se explicó, quiero lograr que, cuando el usuario edita una fecha dentro de un JXDatePicker, puede elegir, si lo escribe de nuevo en el mismo formato, que es por defecto dd.MM.aaaa o simplemente dd.MM. yy Cuando usa la forma corta, quiero que el Selector elija el siglo actual.

Ejemplo

27.01.2012 edited to 27.01.10 should result in 27.01.2010

tanto como

27.01.2012 edited to 27.01.2010 should also result in 27.01.2010

Por defecto, el JXDatePicker lo maneja de la siguiente manera:

27.01.2012 edited to 27.01.10 results in 27.01.0010

Lo cual no es realmente la forma en que quería que funcionara. Después de una breve investigación, encontré el siguiente método en SimpleDateFormat

/**
 * Sets the 100-year period 2-digit years will be interpreted as being in
 * to begin on the date the user specifies.
 *
 * @param startDate During parsing, two digit years will be placed in the range
 * <code>startDate</code> to <code>startDate + 100 years</code>.
 */
public void set2DigitYearStart(Date startDate)

A primera vista, esto sonaba exactamente como lo que necesito. Así que lo probé y desafortunadamente no funcionó como esperaba. Esto se debe a que quiero usar dd.MM.yyyy como formato para mostrar fechas y también quiero que se muestre así en modo edición. Por ejemplo, cuando el usuario inicia una fecha como 27.01.2012, también quiero que sea así en modo edición, y no solo en la forma abreviada: 27.01.12.

Mi problema ahora es que set2DigitYearStart (Date) desafortunadamente solo funciona cuando elijo usar el formato corto en el modo de edición. Hice un pequeño ejemplo para mostrar este caso (se requiere SwingX Library, debido a jxdatepicker y se puede encontrar enaqu).

public class DatePickerExample extends JPanel
{
  static JFrame frame;

  public DatePickerExample()
  {
    JXDatePicker picker = new JXDatePicker();
    JTextField field = new JTextField( 10 );

    add( field );
    add( picker );

    final Calendar instance = Calendar.getInstance();
    instance.set( 2012, 01, 26 );
    Date date = instance.getTime();
    picker.setDate( date );

    //    SimpleDateFormat format = new SimpleDateFormat( "dd.MM.yy" );//Works, but I wonna display and edit it with dd.MM.yyyy
    SimpleDateFormat format = new SimpleDateFormat( "dd.MM.yyyy" );
    final Date startDate = new Date( 0 );//01.01.1970
    format.set2DigitYearStart( startDate );

    picker.setFormats( format );
  }

  public static void main( String[] args )
  {
    frame = new JFrame();
    frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    frame.setBounds( 400, 400, 400, 400 );
    frame.setLayout( new BorderLayout() );
    frame.add( new DatePickerExample() );
    frame.setVisible( true );
  }
}

¿Alguien ya tenía el mismo requisito y puede decirme cómo hacer que esto funcione? Cualquier idea es bienvenida. Muchas gracias por adelantado. ymene

Respuestas a la pregunta(6)

Su respuesta a la pregunta