JXDatePicker использует SimpleDateFormat для форматирования dd.MM.yy в dd.MM.yyyy с текущим веком

как уже объяснялось, я хочу добиться, чтобы, когда пользователь редактировал дату в JXDatePicker, он мог выбирать, набирает ли он ее снова в том же формате, который по умолчанию равен dd.MM.yyyy или просто dd.MM.yy , Когда он использует короткую форму, я хочу, чтобы сборщик выбрал текущий век.

Пример:

27.01.2012 edited to 27.01.10 should result in 27.01.2010

также как и:

27.01.2012 edited to 27.01.2010 should also result in 27.01.2010

По умолчанию JXDatePicker обрабатывает его следующим образом:

27.01.2012 edited to 27.01.10 results in 27.01.0010

Что не совсем так, как я хотел, чтобы это работало. После небольшого исследования я нашел следующий метод в 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)

На первый взгляд это звучало так, как мне нужно. Поэтому я проверил это, и, к сожалению, это не сработало так, как я надеялся. Это потому, что я хочу использовать dd.MM.yyyy в качестве формата для отображения дат, а также хочу, чтобы он отображался в режиме редактирования. Например, когда пользователь кликает на дату, например 27.01.2012, я также хочу, чтобы она была такой же в режиме редактирования, а не только в краткой форме: 27.01.12.

Моя проблема сейчас заключается в том, что set2DigitYearStart (Date), к сожалению, работает только тогда, когда я выбираю использование сокращения в режиме редактирования. Я сделал небольшой пример, чтобы показать этот случай (требуется библиотека SwingX, потому что jxdatepicker и может быть найденВот).

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 );
  }
}

Кто-нибудь уже имел такое же требование и может сказать мне, как сделать эту работу? Любые идеи приветствуются. Заранее большое спасибо. ymene

Ответы на вопрос(3)

Ваш ответ на вопрос