как уже объяснялось. Я хочу добиться того, что, когда пользователь редактирует дату в JXDatePicker, он может выбирать, погода он набирает. снова в том же формате, который по умолчанию равен dd.MM.yyyy или просто dd.MM.yy. Когда он использует короткую форму, я хочу, чтобы Picker выбрал нынешний век.JXDatePicker с помощью SimpleDateFormat для форматирования dd.MM.yy в dd.MM.yyyy с текущим столетием
Пример:
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 Handels его следующим образом:
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 в качестве формата для отображения дат, а также хочу, чтобы он отображался так же, как в editmode. Например, когда пользователь klicks на дату, например 27.01.2012, я также хочу, чтобы это было так же в editmode, а не только в короткой форме: 27.01.12.
Моя проблема теперь в том, что set2DigitYearStart (Date) несчастливо работает только тогда, когда я решил использовать короткую форму в editmode. Я сделал небольшой пример, чтобы показать этот случай (требуется библиотека SwingX из-за jxdatepicker и может быть найдена here).
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
* «Я хочу, чтобы Picker выбрал нынешний век». * Ах, готовясь к ошибке Y2.1K раньше, я вижу. ;) –
Ха-ха, меня! Несмотря на то, что в 2012 году нет ничего плохого в том, как будет работать программное обеспечение в будущем! : P – crusam