, как уже объяснялось, я хочу добиться, чтобы когда пользователь редактировал дату в JXDatePicker он может выбрать, наберет ли он ее снова в том же формате, который по умолчанию дд.ММ.гггг или просто дд.ММ.гг. Когда он использует краткую форму, я хочу, чтобы Сборщик выбрал текущий век.
Пример:
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
* startDate
to startDate + 100 years
.
*/
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