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